Morse is een gecodeerde communicatievorm bestaande uit signalen die met tussenpozen worden uitgezonden. Vastgelegde combinaties van deze signalen stellen dan de verschillende letters, leestekens en cijfers voor. Deze morsecode werd in 1835 uitgevonden en ontwikkeld door Samuel Morse, met als doel ze te gebruiken voor het verzenden van telegrafische berichten. Met een telegraaf (zie figuur) kon men namelijk enkel kiezen tussen twee toestanden: sleutel naar beneden (= stroom) of sleutel naar boven (= geen stroom) en tijdsduur (kort of lang). Telegrafie wordt algemeen beschouwd als een voorloper van de latere digitale communicatie. Merk op dat in snelheidswedstrijden tussen ervaren morsecodeoperatoren en experts in het verzenden van SMS berichten, morsecode steevast als overwinnaar1 uit de bus komt.
In de internationale morsecode worden korte signalen genoteerd met een punt (.) en lange signalen met een koppelteken (-). Tussen verschillende lettertekens wordt telkens een korte pauze ingelast (letterspatie) die wordt genoteerd met een spatie, en tussen verschillende woorden wordt telkens een langere pauze ingelast (woordspatie) die wordt genoteerd met een slash (/). Zo is ... --- ... vrij algemeen bekend als de voorstelling van het SOS signaal in morsecode. De tekst MORSE CODE zelf wordt in morsecode genoteerd als
-- --- .-. ... . / -.-. --- -.. . M O R S E (spatie) C O D E
Gegeven is een tekstbestand morsecode.txt2. Dit tekstbestand bevat een lijst van lettertekens (eerste kolom) en hun corresponderende voorstelling in morsecode (tweede kolom). De kolommen worden gescheiden door een tab. In dit bestand zie je bijvoorbeeld dat de letter K in morsecode wordt voorgesteld als -.- en dat een komma wordt voorgesteld als --..--. Gevraagd wordt:
Schrijf een functie leesMorseCodes waaraan de locatie van een tekstbestand moet doorgegeven worden. De inhoud van dit tekstbestand moet opgemaakt zijn zoals bestand morsecode.txt3. De functie moet als resultaat een dictionary teruggeven, waarin de karakters uit het bestand als sleutels gebruikt worden, en de morsecode notatie van deze karakters als hun corresponderende waarden.
Schrijf een functie tekstNaarMorse waaraan twee parameters moeten doorgegeven worden. De functie moet voor de string die als eerste parameter wordt doorgegeven, de corresponderende voorstelling in morsecode teruggeven. Hierbij moet de omzetting van karakters naar hun corresponderende morsecode opgezocht worden in de dictionary die als tweede parameter aan de functie wordt doorgegeven. Deze dictionary heeft de vorm zoals die door de functie leesMorseCodes wordt teruggegeven. Karakters die niet in de dictionary (en dus niet in morsecode.txt4) teruggevonden worden, moeten bij deze omzetting genegeerd worden. Bij de omzetting naar morsecode moet ook geen onderscheid gemaakt worden tussen grote en kleine letters in de string die als eerste parameter aan de functie tekstNaarMorse wordt doorgegeven.
Schrijf een functie morseNaarTekst die morsecode omzet naar leesbare tekst. De morsecode moet als eerste parameter aan de functie doorgegeven worden. Analoog aan de functie tekstNaarMorse, moet ook de functie morseNaarTekst voor de omzetting van morsecode naar hun corresponderende karakter een beroep doen op de dictionary die als tweede parameter aan de functie wordt doorgegeven. Deze dictionary heeft de vorm zoals die door de functie leesMorseCodes wordt teruggegeven.
In onderstaande interactieve Python sessie gaan we ervan uit dat het tekstbestand morsecode.txt5 zich in de huidige directory bevindt.
>>> karakterNaarCode = leesMorseCodes('morsecode.txt')
>>> karakterNaarCode['S']
'...'
>>> karakterNaarCode['O']
'---'
>>> karakterNaarCode = leesMorseCodes('morsecode.txt')
>>> morse = tekstNaarMorse('SOS Piet', karakterNaarCode)
>>> morse
'... --- .../.--. .. . -'
>>> morseNaarTekst(morse, karakterNaarCode)
'SOS PIET'
Het knipperlicht bovenop de Capital Records Tower in Hollywood, Los Angeles spelt het woord HOLLYWOOD in morsecode. Het doet dit al onafgebroken sedert de opening van het gebouw in 1956.