David Richerby'yi yorumlardan alıntı:
⋅ E'yi ve - T'yi temsil ettiğinden, boşluksuz herhangi bir Mors mesajı içinde bir dize olarak yorumlanabilir.{E,T}∗
Ayrıca, A, I, M ve N iki mors karakterinin (sırasıyla sırasıyla by-, ⋅⋅, -, -⋅) dört olası birleşimi ile temsil edildiğinden, boşluksuz herhangi bir mesaj bir dize olarak da yorumlanabilir. . 1'den büyük olan herhangi bir Mors mesajı için bunun David'in yorumundan farklı olduğuna dikkat edin. Bu nedenle, benzersiz yorumlara sahip olan tek mesajlar, uzunluk 1'dir (ve sanırım, eğer bir mesaj olarak sayılırsa, 0) - bu, E E'yi temsil eder ve -, T'yi temsil eder.{A,I,M,N}∗{E,T}?
İşte size bir dize .
ve tüm olası yorumlarını anlatan bazı JavaScript -
. 22'ye kadar uzunluktaki diziler bir saniyenin altında koşuyor, ancak bundan daha yüksek bir şey oldukça yavaşlamaya başlıyor - örneğin, HELLO WORLD'ü onunla çözmeyi denemem. Tarayıcınızda bir JavaScript konsolu açabilir, bunu yapıştırabilir ve sonra örneğin arayabilirsiniz decode('......-...-..---')
. (Bu örnekte, 2446 numaralı giriş, "HELLO" hedeflenen dizedir.)
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'
};
Sadece gerçek kelimelerin dizelerine budamak için kod biraz daha uzun, ben de buraya koydum . Node.js altında çalışır ve adresinde bir dosya bekler /usr/share/dict/words-2500
. Kullandığım sözlük burada bulunabilir . Saf değildir - ilerledikçe kuru erik, böylece daha büyük girdilerde çok daha hızlı çalışır .
Sözlük, internette bir yerde bulduğum en iyi 2500 kelime listesinden, eksi bazı 1-, 2- ve 3- kelime olmadığını düşündüğüm harf kombinasyonlarından oluşuyor. Bu algoritma, aralarından seçim yapabileceğiniz çok kısa kelime olmasına karşı hassastır ve eğer her mektuba bir kelime olarak izin verirseniz (size bakıyorum), sert bir şekilde yavaşlar /usr/share/dict/words
.
Algoritma, kelime sayısına göre sıralama yaparak sona erer, böylece "ilginç" olanlar umarım en üstte olurlar. Bu harika HELLO WORLD
çalışıyor, bir saniyenin altında çalışıyor ve beklenen ifadeyi ilk vuruş olarak döndürüyor. Bundan da öğrendim DATA SCIENTIST
(denedim sadece diğer ifade) aynı Mors kodları NEW REAL INDIA
.
Düzenleme: Birkaç dakika daha ilginç olanları aradım. Kelimeler SPACES
ve SWITCH
morsagramlar. Şimdiye kadar bulduğum en uzun tek kelime çifti.