Op het Trinity Church Cemetery in New York ligt James Leeson (1756–1794) begraven. Bovenaan zijn grafsteen staat een merkwaardige inscriptie, waarvan pas in 1889 bleek dat ze de tekst REMEMBER DEATH voorstelt in het rozenkruisersgeheimschrift.
Het rozenkruisersgeheimschrift (ook wel vrijmetselaarsalfabet of maçonniek kwadraatschrift) is een monoalfabetische versleutelingsmethode waarbij de letters van de platte tekst gecodeerd worden door middel van eenvoudig te onthouden diagrammen. De methode — die ook onder de minder lovende naam varkenshokversleuteling (of pigpen) bekend staat — wordt in het algemeen toegeschreven aan de rozenkruisers. Dit geheim genootschap van wijsgerigen zou er in de 18e eeuw gebruik van gemaakt hebben om er haar geheimen mee te bewaren.
De oudst bekende variant is van Heinrich Cornelius Agrippa von Nettesheim die de methode uitlegt in zijn De occulta philosophia uit 1533. Dit werk werd in 1586 door Blaise de Vigenère hergebruikt in zijn tractaat aangaande geheimschrift. Er zijn vele varianten mogelijk, maar een geoefend cryptoanalist zal doorgaans geen enkele moeite hebben met de ontcijfering.
De opgave bestaat erin een gegeven woord uit te schrijven, maar dan gecodeerd in het rozenkruisersgeheimschrift dat gebruik maakt van de volgende sleutel.
Hierbij moet elke letter van het gegeven woord vertaald worden naar zijn symbolische voorstelling in het rozenkruisersgeheimschrift. Deze voorstelling bestaat uit $$3 \times 3$$ karakters. Het middelste karakter van de symbolische voorstelling geeft aan in welk van de drie roosters de letter voorkomt: een spatie stelt het linkse rooster voor, een punt (.) het middelste rooster, en een dubbelpunt (:) het rechtse rooster. Voorts moeten er lijnen links, rechts, boven en onder getrokken worden, overeenkomstig de positie van de letter in het rooster. Hieronder tonen we bij wijze van voorbeeld de symbolische voorstelling van de letters in het middelste rooster.
| | | | --+ +-+ +-- --+ +-+ +--
.| |.| |. .| |.| |. .| |.| |.
--+ +-+ +-- --+ +-+ +-- | | | |
J K L M N O P Q R
Merk dus op dat fragmenten van een horizontale lijn voorgesteld worden door een koppelteken (-) en fragmenten van een verticale lijn door een verticale streep (|). Hoekpunten van de symbolische voorstelling waar twee lijnen samenkomen, worden voorgesteld door een plusteken (+). Gevraagd wordt:
Schrijf een functie rozenkruisersletter waaraan een letter moet doorgegeven worden. De functie moet een string teruggeven bestaande uit 3 regels van 3 karakters, die de gegeven letter in het rozenkruisersgeheimschrift voorstelt. Zorg ervoor dat er zo weinig mogelijk voorwaarden moeten getest worden om de voorstelling van de letter in het rozenkruisersgeheimschrift te bepalen. Vermijd met andere woorden programmeerconstructies van de vorm: als de letter A is dan is dit de symbolische voorstelling, als de letter B is dan is dit de voorstelling, …
Gebruik de functie rozenkruisersletter om een functie rozenkruisersgeheimschrift te schrijven. Aan deze functie moet een woord doorgegeven worden dat enkel bestaat uit letters. De functie moet een string bestaande uit drie regels teruggeven, die de symbolische voorstelling van het gegeven woord in het rozenkruisersgeheimschrift voorstelt. Hierbij wordt tussen de symbolische voorstelling van de letters telkens een kolom van drie spaties gevoegd.
Beide functies mogen geen onderscheid maken tussen hoofdletters en kleine letters.
>>> print(rozenkruisersletter('A'))
|
|
--+
>>> print(rozenkruisersletter('m'))
--+
.|
--+
>>> print(rozenkruisersletter('U'))
|
|:
+--
>>> print(rozenkruisersgeheimschrift('python'))
--+ --+ | | +-+ +-- +-+
.| :| |:| | | |. |.|
| | +-+ | | +-- +-+
>>> print(rozenkruisersgeheimschrift('Rosenkreutz'))
+-- +-- | +-+ +-+ | | +-- +-+ | | | +-+
|. |. :| | | |.| |.| |. | | |: |:| |:|
| +-- --+ +-+ +-+ +-+ | +-+ +-- +-+ | |