의견에서 David Richerby를 인용 :
⋅는 E를, −는 T를 나타내므로 공백이없는 모스 메시지는 에서 문자열로 해석 될 수 있습니다.{E,T}∗
또한 A, I, M 및 N은 두 개의 모스 문자 (각각 ⋅-, ⋅⋅,-, -⋅)의 네 가지 가능한 조합으로 표시되므로 공백이없는 모든 메시지는 문자열로 해석 될 수 있습니다. . 길이가 1보다 큰 Morse 메시지의 경우 David의 해석과는 다릅니다. 따라서 고유 한 해석을 가진 유일한 메시지는 길이 1 (메시지로 간주되는 경우 0)-즉 E를 나타내는 ⋅-T를 나타내는 것으로 가정합니다.{A,I,M,N}∗{E,T}?
다음은 .
및 의 문자열에 대한 가능한 모든 해석을 알려주는 JavaScript입니다 -
. 최대 길이가 22 인 문자열은 1 초 안에 실행되지만 그보다 높은 것은 매우 느리게 시작됩니다. 예를 들어 HELLO WORLD를 해독하려고하지 않습니다. 브라우저에서 JavaScript 콘솔을 열어서 붙여 넣은 다음 (예 :)을 호출 할 수 있습니다 decode('......-...-..---')
. (이 예에서 항목 # 2446은 의도 된 문자열 "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'
};
실제 단어 문자열에만 정리하는 코드는 조금 더 길기 때문에 여기에 넣습니다 . node.js에서 실행되며에 파일이 필요 /usr/share/dict/words-2500
합니다. 내가 사용하는 사전은 여기 에서 찾을 수 있습니다 . 순진하지 않습니다-자르기 때문에 더 큰 입력에서 훨씬 빠르게 실행됩니다 .
사전은 내가 어딘가에 인터넷에서 찾은 상위 2,500 개의 단어 목록으로 구성되며, 단어가 아닌 것으로 간주되는 1, 2 및 3 개의 문자 조합을 뺀 것입니다. 이 알고리즘은 짧은 단어를 너무 많이 선택하는 데 민감하며 모든 개별 문자를 단어로 허용하면 크게 느려집니다 (내가보고 있습니다 /usr/share/dict/words
).
이 알고리즘은 단어 수를 기준으로 정렬하여 완료되므로 "흥미로운"단어가 맨 위에 오기를 바랍니다. 이것은 HELLO WORLD
1 초 안에 실행되고 예상 구문을 첫 번째 적중으로 반환하여 훌륭하게 작동합니다 . 이것으로부터 나는 또한 DATA SCIENTIST
(내가 시도한 유일한 다른 문구) 모스 코드는와 동일 하다는 것을 배웠다 NEW REAL INDIA
.
편집 : 몇 분 동안 더 흥미로운 것을 검색했습니다. 단어 SPACES
와 SWITCH
모사 그램입니다. 지금까지 그들은 내가 찾은 가장 긴 단일 단어 쌍입니다.