Morse Code Translator ใช้ในทฤษฎีการเข้ารหัส (Cryptography) ตั้งชื่อโดย Samuel F. B. Morse เทคนิคนี้แปลงข้อความเป็นชุดของจุด (.) ขีด (-) และเครื่องหมายจุลภาค (/)
เทคนิคนี้ง่ายมาก ทุกตัวอักษรอังกฤษมีรหัส Morse แทน เราเพียงเข้ารหัสจากข้อความเป็นสัญลักษณ์ และถอดรหัสจากสัญลักษณ์กลับเป็นอังกฤษ
ตารางรหัส Morse (Dictionary)
MORSE_CODE_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':'-----',
', ':'--..--', '.':'.-.-.-', '?':'..--..', '/':'-..-.',
'-':'-....-', '(':'-.--.', ')':'-.--.-'
}
ตัวอย่าง
Message: PYTHON-PROGRAM
Output: .--. -.-- - .... --- -. -....- .--. .-. --- --. .-. .- --
อัลกอริทึม
การเข้ารหัส (Encryption)
- รับสตริง ใช้แต่ละตัวอักษรค้นหาใน Morse dictionary นำรหัสที่ตรงกันมา
- เก็บรหัสไว้ในตัวแปร คั่นแต่ละรหัส Morse ด้วยช่องว่าง 1 ช่อง
- คั่นระหว่างคำด้วยช่องว่าง 2 ช่อง
การถอดรหัส (Decryption)
- เพิ่มช่องว่างท้ายสตริง
- วนลูปอ่านตัวอักษรจนกว่าจะเจอช่องว่าง
- เมื่อเจอช่องว่าง ค้นหารหัสใน dictionary เก็บไว้
- เมื่อเจอช่องว่าง 2 ช่องติดกัน เพิ่มช่องว่างในข้อความถอดรหัส
- ช่องว่างสุดท้าย = ตัวอักษรสุดท้าย
โค้ดตัวอย่างสมบูรณ์
# -*- coding: utf-8 -*-
MORSE_CODE_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':'-----',
', ':'--..--', '.':'.-.-.-', '?':'..--..', '/':'-..-.',
'-':'-....-', '(':'-.--.', ')':'-.--.-'
}
def encryption(message):
cipher = ''
for letter in message:
if letter != ' ':
cipher += MORSE_CODE_DICT[letter.upper()] + ' '
else:
cipher += ' '
return cipher
def decryption(message):
message += ' '
decipher = ''
citext = ''
for letter in message:
if letter != ' ':
citext += letter
else:
if citext:
# ค้นหาคีย์จากค่าใน dictionary
for key, value in MORSE_CODE_DICT.items():
if value == citext:
decipher += key
break
citext = ''
else:
# เจอช่องว่าง 2 ช่องติดกัน = ช่องว่างระหว่างคำ
decipher += ' '
return decipher
def main():
message = "PYTHON-PROGRAM"
encrypted = encryption(message.upper())
print("Encrypted:", encrypted)
message = ".--. -.-- - .... --- -. -....- .--. .-. --- --. .-. .- -- "
decrypted = decryption(message)
print("Decrypted:", decrypted)
if __name__ == '__main__':
main()
ผลลัพธ์
Encrypted: .--. -.-- - .... --- -. -....- .--. .-. --- --. .-. .- --
Decrypted: PYTHON-PROGRAM
หมายเหตุ: ฟังก์ชันถอดรหัสในตัวอย่างเดิมมีบั๊ก (ตัวแปร i ไม่รีเซ็ต) โค้ดด้านบนแก้ไขให้ทำงานถูกต้องแล้ว