อ้างถึง David Richerby จากความคิดเห็น:
เนื่องจาก⋅แทน E และ - แทน T ข้อความมอร์สที่ไม่มีช่องว่างสามารถตีความได้ว่าเป็นสตริงใน{E,T}∗
นอกจากนี้เนื่องจาก A, I, M และ N ถูกแสดงโดยการรวมกันที่เป็นไปได้สี่แบบของอักขระมอร์สสองตัว (⋅-, ⋅⋅, -, -⋅, ตามลำดับ) ข้อความใด ๆ ที่ไม่มีช่องว่างสามารถตีความได้ว่าเป็นสตริงใน . โปรดทราบว่าสำหรับข้อความของมอร์สที่มีความยาว> 1 สิ่งนี้แตกต่างจากการตีความของดาวิด ดังนั้นข้อความเดียวที่มีการตีความที่ไม่ซ้ำกันคือความยาว 1 (และฉันสมมุติว่า 0 ถ้านับเป็นข้อความ) - นั่นคือ⋅แทน E และ - แทน T{A,I,M,N}∗{E,T}?
นี่คือ JavaScript บางอย่างที่จะบอกคุณตีความเป็นไปได้ทั้งหมดของสตริงของและ.
-
สตริงที่มีความยาวสูงสุด 22 รันภายในไม่กี่วินาที แต่สิ่งที่สูงกว่านั้นเริ่มช้าลง - ฉันจะไม่ลองถอดรหัส HELLO WORLD ด้วยเช่นกัน คุณสามารถ pop เปิดคอนโซล 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
โดยใช้เวลาเพียงเสี้ยววินาทีและส่งคืนวลีที่คาดไว้เมื่อถูกโจมตีครั้งแรก จากนี้ผมยังได้เรียนรู้ว่าDATA SCIENTIST
(เพียงวลีอื่น ๆ ที่ฉันพยายาม) NEW REAL INDIA
รหัสมอร์สเช่นเดียวกับ
แก้ไข: ฉันค้นหาสิ่งที่น่าสนใจมากขึ้นในไม่กี่นาที คำSPACES
และSWITCH
morsagrams จนถึงตอนนี้พวกเขาเป็นคู่คำเดียวที่ยาวที่สุดที่ฉันได้พบ