Pollux is een geheimschrift dat in twee stappen werkt. Om een bericht te coderen, wordt het eerst omgezet naar morse: een code die gebruikt werd om berichten via een telegraaf te versturen. Een bericht in morse bestaat uit een opeenvolging van korte signalen (voorgesteld door een punt (.)) en lange signalen (voorgesteld door een streep (-)). Elk karakter wordt voorgesteld als een unieke combinatie van korte en lange signalen. Tussen twee opeenvolgende karakters wordt telkens een korte pauze ingelast, die voorgesteld wordt als een spatie. Op die manier wordt het woord CASTOR in morse voorgesteld als
-.-. .- ... - --- .-.
Voor het tweede deel van de codering leggen we vast door welke karakters we de morsesymbolen (punten, strepen en spaties) kunnen vervangen. Daarbij geldt dat hetzelfde karakter nooit kan gebruikt worden als vervanging voor meerdere symbolen. Elk symbool van het bericht in morse wordt dan vervangen door een willekeurig gekozen karakter uit de karakters waardoor het symbool kan vervangen worden. Stel bijvoorbeeld dat we vastleggen dat de morsesymbolen door de volgende karakters kunnen vervangen worden:
punt (.) | 0378AEFMOPQXYZ |
streep (-) | 145BCGJNRTW |
spatie ( ) | 269DHIKLSUV |
Dan kan het woord CASTOR als volgt gecodeerd worden in het Pollux geheimschrift:
platte tekst | C A S T O R |
morse | -.-. .- ... - --- .-. |
cijfertekst | 4PGM9F1VQEMHCUB1B28BP |
We geven nog een voorbeeld waarbij we nu op de volgende manier vastleggen door welke karakters de morsesymbolen kunnen vervangen worden:
punt (.) | 158 |
streep (-) | 047 |
spatie ( ) | 2369 |
Dan kan het bericht BETA GEMINORUM als volgt gecodeerd worden in het Pollux geheimschrift:
platte tekst | B E T A G E M I N O R U M |
morse | -... . - .- --. . -- .. -. --- .-. ..- -- |
cijfertekst | 78559590317270898307655205347035412184970 |
Merk daarbij op dat de spatie in BETA GEMINORUM geen voorstelling heeft in morsecode, en dus ook niet omgezet wordt. Het decoderen van Pollux gebeurt in omgekeerde volgorde: alle karakters uit de cijfertekst worden terug omgezet naar hun corresponderende morsesymbolen, en dan wordt het bericht in morse terug omgezet naar het oorspronkelijke bericht.
We leggen een morsecode vast in een tekstbestand. Elke regel van het bestand bevat een uniek karakter, gevolgd door een tab en de unieke combinatie van punten en strepen waardoor het karakter voorgesteld wordt in morse. Als voorbeeld werken we met het bestand morse.txt1:
A .- B -... C -.-. D -.. E . ⋮ ⋮ ( -.--. = -...- @ .--.-.
Gevraagd wordt:
Schrijf een functie lees_code waaraan de locatie (str) moet doorgegeven worden van een tekstbestand dat een morsecode vastlegt. De functie moet een dictionary (dict) teruggeven die elk karakter (str) uit het bestand afbeeldt op de corresponderende reeks punten en streepjes (str). We noemen dit de dictionary-voorstelling van de morsecode.
Schrijf een functie tekst2morse waaraan twee argumenten moeten doorgegeven worden: i) een bericht (str) en ii) de dictionary-voorstelling van een morsecode $$\mathcal{M}$$ (dict). De functie moet het bericht in morse teruggeven, waarbij de omzetting gebeurt volgens morsecode $$\mathcal{M}$$. Alle karakters van het bericht die niet voorkomen in morsecode $$\mathcal{M}$$ worden genegeerd bij de omzetting naar morse.
Schrijf een functie morse2tekst waaraan twee argumenten moeten doorgegeven worden: i) een bericht in morse (str) en ii) de dictionary-voorstelling van de gebruikte morsecode (dict). De functie moet het oorspronkelijke bericht (str) teruggeven.
Schrijf een functie codeer waaraan vijf argumenten moeten doorgegeven worden. Het eerste argument is een bericht (str) en het tweede de dictionary-voorstelling van een morsecode $$\mathcal{M}$$ (dict). De laatste drie argumenten zijn strings (str) die respectievelijk aangeven door welke karakters punten, strepen en spaties kunnen vervangen worden. De functie moet een gecodeerde versie van het bericht teruggeven volgens het Pollux geheimschrift met morsecode $$\mathcal{M}$$. Zorg er daarbij voor dat de vervanging van elk punt, elke streep en elke spatie volledig willekeurig gebeurt.
Schrijf een functie decodeer waaraan vijf argumenten moeten doorgegeven worden. Het eerste argument is een bericht dat gecodeerd werd volgens het Pollux geheimschrift (str). Het tweede argument is de dictionary-voorstelling van de morsecode (dict) die daarbij gebruikt werd. De laatste drie argumenten zijn strings (str) die respectievelijk aangeven door welke karakters punten, strepen en spaties werden vervangen. De functie moet het oorspronkelijke bericht (str) teruggeven.
In onderstaande voorbeeldsessie gaan we ervan uit dat het tekstbestand morse.txt2 zich in de huidige directory bevindt.
>>> code = lees_code('morse.txt3')
>>> code['A']
'.-'
>>> code['8']
'---..'
>>> tekst2morse('CASTOR', code)
'-.-. .- ... - --- .-.'
>>> morse2tekst('-.-. .- ... - --- .-.', code)
'CASTOR'
>>> tekst2morse('BETA GEMINORUM', code)
'-... . - .- --. . -- .. -. --- .-. ..- --'
>>> morse2tekst('-... . - .- --. . -- .. -. --- .-. ..- --', code)
'BETAGEMINORUM'
>>> codeer('CASTOR', code, '0378AEFMOPQXYZ', '145BCGJNRTW', '269DHIKLSUV')
'57TEUANUPXA9GUC14IQJ3'
>>> decodeer('4PGM9F1VQEMHCUB1B28BP', code, '0378AEFMOPQXYZ', '145BCGJNRTW', '269DHIKLSUV')
'CASTOR'
>>> codeer('BETA GEMINORUM', code, '158', '047', '2369')
'01589134657940131904651341200468056880907'
>>> decodeer('78559590317270898307655205347035412184970', code, '158', '047', '2369')
'BETAGEMINORUM'
Pollux — aangeduid als β Geminorum (gelatiniseerd tot Beta Geminorum; afgekort tot Beta Gem of β Gem) — is een oranjekleurige reuzenster op ongeveer 34 lichtjaar van de zon in het sterrenbeeld Tweelingen (Gemini). Het is de helderste ster in het sterrenbeeld Tweelingen en de dichtstbijzijnde reuzenster bij de zon.
De naam van de ster verwijst naar de tweelingen Castor en Pollux4 uit de Griekse en Romeinse mythologie.