Morse Code chuyển đổi chữ cái/số thành chuỗi dấu chấm (.), gạch ngang (-), dấu cách. Dùng trong mật mã học, truyền thông.
Bảng mã Morse
'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':'-----', ', ':'--..--', '.':'.-.-.-', '?':'..--..',
'/':'-..-.', '-':'-....-', '(':'-.--.', ')':'-.--.-'
Thuật toán
Mã hóa: Mỗi ký tự → mã Morse, cách nhau 1 khoảng trắng. Giữa từ cách 2 khoảng trắng.
Giải mã: Đọc chuỗi Morse, tách theo khoảng trắng, tra ngược từ điển. 2 khoảng trắng liên tiếp = khoảng trắng giữa từ.
Code hoàn chỉnh
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 encrypt(message):
cipher = ''
for letter in message:
if letter != ' ':
cipher += MORSE_CODE_DICT[letter.upper()] + ' '
else:
cipher += ' '
return cipher
def decrypt(message):
message += ' '
decipher = ''
citext = ''
for letter in message:
if letter != ' ':
citext += letter
else:
if citext:
decipher += list(MORSE_CODE_DICT.keys())[
list(MORSE_CODE_DICT.values()).index(citext)]
citext = ''
decipher += ' '
return decipher.strip()
# Test
msg = "PYTHON-PROGRAM"
enc = encrypt(msg)
print(enc) # .--. -.-- - .... --- -. -....- .--. .-. --- --. .-. .- --
print(decrypt(enc)) # PYTHON-PROGRAM
Ứng dụng
- Giáo dục: học mã hóa cơ bản.
- Embedded: truyền tín hiệu LED/buzzer.
- Game, puzzle, CTF.