In morsecode1 wordt elk karakter van een woord omgezet naar een unieke combinatie van punten (.) en streepjes (-). De omzettingen van de individuele karakters worden telkens van elkaar gescheiden door één enkele spatie. Als we echter alle spaties uit de morsecode wegdenken, dan kunnen we enkele nieuwe definities bedenken.
We zeggen dat woorden isomorse zijn als ze dezelfde morsecode hebben. De volgende drie woorden zijn bijvoorbeeld isomorse:
woord | morsecode |
---|---|
BLINKEN | -... .-.. .. -. -.- . -. |
DELICTEN | -.. . .-.. .. -.-. - . -. |
NEERSTEKEN | -. . . .-. ... - . -.- . -. |
Als we alle punten en streepjes omwisselen in de morsecode van een woord (punten worden streepjes en streepjes worden punten) en we bekomen daarmee de morsecode van een ander woord, dan zeggen we dat deze woorden antimorse zijn.
woord | morsecode | omgewisselde morsecode | woord |
---|---|---|---|
EKSTEROGEN | . -.- ... - . .-. --- --. . -. | -.- .- -- .--. - .... . -- .- | KAMPTHEMA |
NEONLAMPEN | -. . --- -. .-.. .- -- .--. . -. | .--. .. .- -. --- ... - ..- -.- | PIANOSTUK |
EIWITARM | . .. .-- .. - .- .-. -- | --- -. .-- . - . -. -.. | ONWETEND |
LEERJAAR | .-.. . . .-. .--- .- .- .-. | -. --- -- .- -.. . -. - . -. - | NOMADENTENT |
OZONGATEN | --- --.. --- -. --. .- - . -. | ... ..- -... .-. . --. . -. - | SUBREGENT |
Als we de volgorde van de punten en streepjes omkeren in de morsecode van een woord en we bekomen daarmee de morsecode van een ander woord, dan zeggen we dat deze woorden revomorse zijn.
woord | morsecode | omgekeerde morsecode | woord |
---|---|---|---|
DUIVEL | -.. ..- .. ...- . .-.. | . .-. . -.. .. . -. ... - | EREDIENST |
BINDINGEN | -... .. -. -.. .. -. --. . -. | .-. . -- .-.. .. -.-. .... - | REMLICHT |
HUISDIEREN | .... ..- .. ... -.. .. . .-. . -. | . -..- .... .. -... .. - .. . ... | EXHIBITIES |
ESTHETICI | . ... - .... . - .. -.-. .. | ... - .-. . -... . .-. ... | STREBERS |
LEGITIEM | .-.. . --. .. - .. . -- | -- . . .-.. . --.. . -. | MEELEZEN |
Als de morsecode van een woord palindromisch is (omgekeerde morsecode is gelijk aan de morsecode zelf) dan zeggen we dat het woord een palinmorse is.
woord | morsecode |
---|---|
ARCHITECTE | .- .-. -.-. .... .. - . -.-. - . |
ERETITEL | . .-. . - .. - . .-.. |
STARTWAARDE | ... - .- .-. - .-- .- .- .-. -.. . |
VAKANTIE | ...- .- -.- .- -. - .. . |
WATERWEG | .-- .- - . .-. .-- . --. |
Uiteraard kunnen we het voorgaande ook combineren, waarbij we zowel alle punten en streepjes omwisselen als de volgorde van de punten en streepjes omkeren.
Om de morsecode van woorden te kunnen bepalen, wordt de omzetting van elk karakter naar een unieke combinatie van punten en streepjes vastgelegd in een tekstbestand. Elke regel van dat bestand bestaat uit een karakter, gevolgd door een spatie en de unieke combinatie van punten en streepjes voor dat karakter. Omdat bij de omzetting geen onderscheid gemaakt wordt tussen hoofdletters en kleine letters, worden letters in het bestand altijd voorgesteld in hoofdletters. Gevraagd wordt:
Schrijf een functie morsecode waaraan de locatie (str) van een tekstbestand moet doorgegeven worden dat de omzetting bevat van karakters naar hun unieke combinatie van punten en streepjes. De functie moet een dictionary (dict) teruggeven die elk karakter (str) uit het gegeven bestand afbeeldt op de corresponderende combinatie van punten en streepjes (str).
Schrijf een functie tekst2morse waaraan twee argumenten moeten doorgegeven worden: i) een woord $$w$$ (str) en ii) een dictionary $$d$$ (dict) die karakters (str) afbeeldt op hun corresponderende combinatie van punten en streepjes (str). De functie moet de morsecode van $$w$$ teruggeven (met spaties tussen omzettingen van individuele karakters). Daarbij mag geen onderscheid gemaakt worden tussen hoofdletters en kleine letters. Anderzijds mag er wel van uitgegaan worden dat alle karakters van $$w$$ als sleutel voorkomen in $$d$$, zonder dat dit expliciet moet gecontroleerd worden.
Schrijf een functie omwisselen waaraan een string $$s$$ (str) moet doorgegeven worden. De functie moet $$s$$ teruggeven waarin alle voorkomens van punten (.) en streepjes (-) omgewisseld werden: punten zijn vervangen door streepjes en streepjes zijn vervangen door punten, maar alle andere karakters zijn ongewijzigd gebleven.
Schrijf een functie databank waaraan twee argumenten moeten doorgegeven worden: i) de locatie (str) van een tekstbestand dat een lijst van woorden bevat (elk op een afzonderlijke regel) en ii) een dictionary $$d$$ (dict) die karakters (str) afbeeldt op hun corresponderende combinatie van punten en streepjes (str). De functie moet een databank voor de gegeven woordenlijst teruggeven. Dit is een dictionary (dict) waarvan de sleutels gevormd worden door de morsecode van alle woorden uit het gegeven bestand, zonder de spaties. Elke sleutel moet door de dictionary afgebeeld worden op de verzameling (set) van alle woorden (str) uit het bestand met die morsecode (zonder spaties). De databank groepeert dus isomorse woorden uit het gegeven bestand.
Schrijf een functie opzoeken waaraan drie argumenten moeten doorgegeven worden: i) een woord $$w$$ (str), ii) een dictionary $$d$$ (dict) die karakters (str) afbeeldt op hun corresponderende combinatie van punten en streepjes (str) en iii) een databank (dict) voor een gegeven woordenlijst. De functie moet een verzameling (set) teruggeven met alle woorden (str) uit de databank die dezelfde morsecode hebben als $$w$$.
De functie heeft ook nog een optionele parameter omgewisseld waaraan een Booleaanse waarde (bool, standaardwaarde: False) kan doorgegeven worden. Als de waarde True wordt doorgegeven aan de parameter omgewisseld, dan moeten de woorden in de databank opgezocht worden met de morsecode waarin alle voorkomens van punten (.) en streepjes (-) omgewisseld werden.
De functie heeft ook nog een optionele parameter omgekeerd waaraan een Booleaanse waarde (bool, standaardwaarde: False) kan doorgegeven worden. Als de waarde True wordt doorgegeven aan de parameter omgekeerd, dan moeten de woorden in de databank opgezocht worden met de morsecode waarin de volgorde van de punten en streepjes omgekeerd werd.
In onderstaande voorbeeldsessie gaan we ervan uit dat de tekstbestanden morse.txt2 en woorden.txt3 zich in de huidige directory bevinden.
>>> morse = morsecode('morse.txt4')
>>> morse['A']
'.-'
>>> morse['P']
'.--.'
>>> morse['?']
'..--..'
>>> tekst2morse('BLINKEN', morse)
'-... .-.. .. -. -.- . -.'
>>> tekst2morse('delicten', morse)
'-.. . .-.. .. -.-. - . -.'
>>> tekst2morse('VOORLEESSESSIES', morse)
'...- --- --- .-. .-.. . . ... ... . ... ... .. . ...'
>>> omwisselen('-. .. -. . - . . -.')
'.- -- .- - . - - .-'
>>> omwisselen('.- - - . -- .--. -')
'-. . . - .. -..- .'
>>> woorden = databank('woorden.txt5', morse)
>>> woorden['-....-....-.-.-.-.']
{'BLERKEN', 'DELICTEN', 'NEERSTEKEN', 'BLINKEN'}
>>> opzoeken('BLINKEN', morse, woorden)
{'DELICTEN', 'NEERSTEKEN', 'BLINKEN', 'BLERKEN'}
>>> opzoeken('EKSTEROGEN', morse, woorden, omgewisseld=True)
{'KAMPTHEMA'}
>>> opzoeken('ESTHETICI', morse, woorden, omgekeerd=True)
{'STREBERS'}
>>> opzoeken('ARCHITECTE', morse, woorden, omgekeerd=True)
{'ARCHITECTE'}
>>> opzoeken('TROMPET', morse, woorden, omgewisseld=True, omgekeerd=True)
{'PRESTEN', 'PLEITEN', 'WELVEN', 'WUIVEN', 'PLEUR'}
>>> opzoeken('TELESCOOP', morse, woorden, omgekeerd=True, omgewisseld=True)
{'TELESCOOP'}
Hoe toevallig: In het Engels bevat de morsecode van het woord OBSESSIVE een lange reeks opeenvolgende punten (18):
--- -... ... . ... ... .. ...- .
De recordhouder is echter LESSEESHIP met 21 opeenvolgende punten in de morsecode:
.-.. . ... ... . . ... .... .. .--.
In het Nederlands is dat VOORLEESSESSIES met 23 opeenvolgende punten in de morsecode:
...- --- --- .-. .-.. . . ... ... . ... ... .. . ...