Zitat von David Richerby aus den Kommentaren:
Da ⋅ E und - T darstellt, kann jede Morse-Nachricht ohne Leerzeichen als Zeichenfolge in interpretiert werden{ E, T}∗
{ A , ich, M, N}∗{ E, T} ?
Hier ist ein JavaScript, das Ihnen alle möglichen Interpretationen einer Zeichenfolge von .
und zeigt -
. Saiten mit einer Länge von bis zu 22 laufen in weniger als einer Sekunde, aber etwas Höheres wird langsam - ich würde zum Beispiel nicht versuchen, HELLO WORLD damit zu entschlüsseln. Sie können eine JavaScript-Konsole in Ihrem Browser öffnen, diese einfügen und dann beispielsweise aufrufen decode('......-...-..---')
. (In diesem Beispiel ist Eintrag # 2446 die beabsichtigte Zeichenfolge "HELLO".)
var decode = function(code) {
var cache = {
'0': ['']
};
for(var start = 0;start < code.length;start++) {
for(var len = 1;len < 6;len++) {
if(start + len > code.length) continue;
if(!cache[start + len]) cache[start + len] = [];
var curCode = code.slice(start, start + len);
if(dict[curCode]) {
for(var i_start = 0;i_start < cache[start].length;i_start++) {
cache[start + len].push(cache[start][i_start] + dict[curCode]);
}
}
}
}
return cache[code.length];
};
var dict = {
'.-': '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',
'.----': '1',
'..---': '2',
'...--': '3',
'....-': '4',
'.....': '5',
'-....': '6',
'--...': '7',
'---..': '8',
'----.': '9',
'-----': '0'
};
Der Code zum Beschneiden auf nur Zeichenfolgen mit echten Wörtern ist etwas länger, daher setze ich ihn hier ein . Es läuft unter node.js und erwartet eine Datei unter /usr/share/dict/words-2500
. Das Wörterbuch, das ich benutze, finden Sie hier . Es ist nicht naiv - es verkürzt sich, so dass es bei größeren Eingaben viel schneller läuft .
Das Wörterbuch besteht aus einer Liste von 2500 Wörtern, die ich irgendwo im Internet gefunden habe, abzüglich einiger 1-, 2- und 3-Buchstaben-Kombinationen, die ich nicht für Wörter hielt. Dieser Algorithmus reagiert empfindlich darauf, dass zu viele kurze Wörter zur Auswahl stehen, und verlangsamt sich drastisch, wenn Sie beispielsweise jeden einzelnen Buchstaben als Wort zulassen (ich sehe Sie an /usr/share/dict/words
).
Der Algorithmus endet mit der Sortierung nach der Anzahl der Wörter, so dass die "interessanten" hoffentlich ganz oben stehen. Dies funktioniert hervorragend HELLO WORLD
, wenn weniger als eine Sekunde vergangen ist und die erwartete Phrase als erster Treffer zurückgegeben wird. Daraus habe ich auch gelernt, dass DATA SCIENTIST
(die einzige andere Phrase, die ich ausprobiert habe) Morse die gleichen Codes hat wie NEW REAL INDIA
.
Edit: Ich habe ein paar Minuten nach interessanteren gesucht. Die Wörter SPACES
und SWITCH
sind Morsagramme. Bisher sind sie das längste Einzelwortpaar, das ich gefunden habe.