Code: Alles auswählen
>>> len(ALPHABET)
25
R und K sehen ausgesprochen ähnlich aus, was das Alphabet im Beispiel angeht.
Und deshalb findet er auch nicht "AKZENTE" aber durchaus "ARZENTE"
Code: Alles auswählen
>>> len(ALPHABET)
25
Code: Alles auswählen
>>> import morse_eval as me
>>> me.ALPHABET
{'-.-': 'K', '-.': 'N', '-...': 'B', '....': 'H', '-..-': 'X', '---': 'O', '-': 'T', '--..': 'Z', '..': 'I', '..-': 'U', '.--.': 'P', '...-': 'V', '.-.': 'R', '.--': 'W', '.-..': 'L', '--': 'M', '.': 'E', '-.--': 'Y', '--.': 'G', '.-': 'A', '.---': 'J', '--.-': 'Q', '-.-.': 'C', '...': 'S', '-..': 'D', '..-.': 'F'}
>>> len(me.ALPHABET)
26
Code: Alles auswählen
ALPHABET = {
".-": "A",
"-...": "B",
"-.-.": "C",
"-..": "D",
".": "E",
"..-.": "F",
"--.": "G",
"....": "H",
"..": "I",
".---": "J",
"-.-": "K",
".-..": "L",
"--": "M",
"-.": "N",
"---": "O",
".--.": "P",
"--.-": "Q",
".-.": "R",
"...": "S",
"-": "T",
"..-": "U",
"...-": "V",
".--": "W",
"-..-": "X",
"-.--": "Y",
"--..": "Z"
}
def consume(code, suffixes=None):
if not code:
yield ()
else:
if suffixes is None:
suffixes = {}
for morse, letter in ALPHABET.items():
if code.startswith(morse):
suffix = code[len(morse):]
try:
remainder = suffixes[suffix]
except KeyError:
remainder = set(consume(suffix, suffixes))
suffixes[suffix] = remainder
for sub in remainder:
yield (letter,) + sub
def main():
code = ".--.---...-.-." #POSTEN
for message in set(consume(code)):
print("".join(message))
if __name__ == "__main__":
main()