De achteruitkijkspiegel is een geheimschrift met een ingebouwde terugblik.
Bij het coderen van een bericht wordt elke letter gecodeerd als de som van de letter en de vorige letter in de bericht. Daarbij heeft elke letter een waarde die overeenkomt met de positie van de letter in het alfabet: A=0, B=1, C=2, …, Z=25. De optelling wordt uitgevoerd modulo 26 (het aantal letters in het alfabet). Stel bijvoorbeeld dat we de letter D moeten coderen en dat die letter in het bericht wordt voorafgegaan door de letter Z, dan krijgen we dus \[ \text{D} + \text{Z} = (3 + 25)\ \text{mod}\ 26 = 2 = \text{C} \] Bij het coderen geldt verder:
hoofdletters blijven hoofdletters
kleine letters blijven kleine letters
de eerste letter van het bericht heeft geen voorgaande letter en blijft gewoon staan
alle karakters die geen letter zijn, blijven ook gewoon staan
Het decoderen van een gecodeerd bericht gebeurt door dit proces terug te draaien. Om een letter uit het gecodeerd bericht te decoderen, wordt de vorige letter in het oorspronkelijk bericht ervan afgetrokken. Het decoderen moet dus van links naar rechts gebeuren. Stel bijvoorbeeld dat we de letter C moeten decoderen en dat de vorig letter reeds gedecodeerd werd als Z, dan krijgen we dus \[ \text{C} - \text{Z} = (2 - 25)\ \text{mod}\ 26 = 3 = \text{D} \]
Schrijf een functie codeer_letter waaraan twee strings (str) moeten doorgegeven worden: i) een letter $$L$$ uit een bericht dat moet gecodeerd worden en ii) de vorige letter $$V$$ in het bericht. De functie moet de gecodeerde versie (str) van de letter $$L$$ teruggeven.
Schrijf een functie decodeer_letter waaraan twee strings (str) moeten doorgegeven worden: i) een letter $$L$$ uit een gecodeerd bericht en ii) de vorige letter $$V$$ uit het oorspronkelijk bericht. De functie moet de gedecodeerde versie (str) van de letter $$L$$ teruggeven.
Schrijf een functie codeer waaraan een bericht (str) moet doorgegeven worden. De functie moet het gecodeerd bericht (str) teruggeven.
Schrijf een functie decodeer waaraan een gecodeerd bericht (str) moet doorgegeven worden. De functie moet het oorspronkelijk bericht (str) teruggeven.
>>> codeer_letter('d', 'Z')
'c'
>>> codeer_letter('T', 'e')
'X'
>>> decodeer_letter('c', 'Z')
'd'
>>> decodeer_letter('X', 'e')
'T'
>>> codeer('Saw things clearer once you were in my rear-view mirror.')
'Ssw papvty unpervv fbpg cmi qavv mv zk pver-mdma iuziff.'
>>> codeer('The past is always tense. The future perfect.')
'Tal tpsl ba slhwyq lxrfw. Xal jznnlv ttvwjgv.'
>>> decodeer('Ssw papvty unpervv fbpg cmi qavv mv zk pver-mdma iuziff.')
'Saw things clearer once you were in my rear-view mirror.'
>>> decodeer('Tal tpsl ba slhwyq lxrfw. Xal jznnlv ttvwjgv.')
'The past is always tense. The future perfect.'
Edward O'Brien patenteerde in 1905 deze "aan het lichaam bevestigde achteruitkijkspiegel"
"… om het kammen van het haar en het inspecteren van de achterkant van het hoofd te vergemakkelijken."
In wezen is het niets anders dan een harnas met drie spiegels en een felle lamp, ter vervanging van een onhandige handspiegel.
"Daardoor kan de drager beide handen vrijhouden om de hoofdtooi op de juiste manier aan te brengen, het haar te borstelen en andere handelingen uit te voeren, zonder daarbij verstoord te worden door het bijstellen van de spiegel of de lichtbron."
Wel niet vergeten om het daarna terug af te doen …