morse_code_implementation 摩斯電碼實現
morse_code_implementation 摩斯電碼實現
摩爾斯電碼
摩爾斯電碼也被稱作摩斯密碼,是一種時通時斷的訊號程式碼,通過不同的排列順序來表達不同的英文字母、數字和標點符號。它發明於1837年,是一種早期的數字化通訊形式。不同於現代化的數字通訊,摩爾斯電碼只使用零和一兩種狀態的二進位制程式碼,它的程式碼包括五種:
短促的點訊號“・”,讀“滴”(Di)
保持一定時間的長訊號“—”,讀“嗒”(Da)
表示點和劃之間的停頓、
每個詞之間中等的停頓,
以及句子之間長的停頓。
產生歷史
摩斯電碼是一種神奇的密碼,它是一種訊號的程式碼而且它時通時斷,這樣的訊號程式碼經過不同的排列順序從而表現出不同的英文字母、數字以及標點符號等。它的發明者是美國人艾爾菲德·維爾,那個時候他正在協助 SamuelMorse進行摩爾斯電報機的發明(1835年)。
然而摩爾斯電碼是由美國人摩爾斯在1837年被髮明的,它的組成是由點dot(.)劃dash(-)這兩種符號所組成的。在這當中,一點作為一個基本的訊號單位,一劃的長度就相當於是3點的時間長度;在一個字母或是數字之內,每個點、劃之間的間隔就應該是兩點的時間長度;字母(數字)與字母(數字)之間的間隔就是7點的時間長度。摩爾斯碼在早期的無線電上作用是非常大的,它是每個無線電通訊者所須必知的。因為通訊技術的不斷進步,隨後各國就在1999年停止了對摩爾斯碼的使用,可是由於它所佔的頻寬最少,同時又具有一種技術及藝術的特性,所以在實際的生活當中就有著廣泛的應用。
摩斯電碼最早就是用一些表示數字的點和划來進行表示的。其中的數字對應單詞,也就是需要查詢一本程式碼表才可以得知每個詞所對應的數字。用一個電鍵就能夠敲擊出點、劃以及中間的停頓。然而電報是由摩斯所發明的,可是他並沒有相關的專業技術。所以之後他就與艾爾菲德·維爾簽訂了一個協議,讓他幫助自己製作摩斯電碼然後製造出更加實用的裝置。於是,艾爾菲德・維爾構思了一個方案,就是通過點、劃和中間的停頓,把各個字元以及標點符號彼此獨立地傳送出去。之後他們就達成了一致,隨後這種標識不同符號的方案就被放到摩斯的專利中去。然而這就是現在我們所熟知的美式摩爾斯電碼,世界上第一條電報就是通過它來傳送的。
用一種音調平穩而又時斷時續的無線電訊號能夠傳送這樣的程式碼,一般會被稱作是連續波,縮寫就是CW。然而它可以是電報電線中的電子脈衝,同時也可以是一種機械的或是視覺的訊號(如閃光)。在一般的情況下,隨意的任何一種能把書面字元用可變長度的訊號表示的編碼方式,都是能夠稱之為摩爾斯電碼。可是如今這一術語只是用來特指兩種表示英語字母以及符號的摩爾斯電碼:這種美式摩斯電碼就線上電報通訊系統中使用;今天還在使用的國際摩爾斯電碼則僅僅是在使用點和劃(去掉了停頓)。然而電報公司就會根據要發的信的長度收費。商業程式碼精心的設計出了五個字元組成一組的程式碼,把它作為一個單詞傳送。就比如,BYOXO; LIOUY;AYYU。摩斯電碼能夠單獨傳送這些五個字元的簡語。人們在網路用語中一般也會說一些常用的摩斯商用程式碼。現今仍然在業餘無線電中使用的就有Q簡語以及Z簡語:然而他們最初是為報務員之間交流電報編號、通訊質量、頻率變更等資訊服務的。
在1838年1月8日,艾菲爾德·維爾曾經展示了一種使用點和劃的電報碼,其實這就是摩爾斯電碼的前身。然而作為一種資訊編碼標準的摩斯電碼,它擁有非常長的生命力,就這一點來說,就是其他編碼所無法超越的。
摩爾斯電碼在海事通訊中被作為國際標準一直使用到1999年。1997年當法國海軍停止使用摩爾斯電碼時,其傳送的最後條訊息就是:“所有人注意,這是我們在永遠沉寂之前最後的一聲吶喊!”
表示方法
其實有兩種“符號”是用來表示字元的:那就是劃和點,或分別叫嗒(Dah)和滴(Dit)或是長和短。而發報的速度是由點的長度來決定的,而且被當作是發報的時間參考。下面就是時間控制的圖示:
Morsecode:-- --- ·-· ··· · / -·-· --- -·· ·
這裡,“-”表示劃,“.”表示點。這是上面訊息的準確發報時間(“="表示訊號有,”.“ 代表訊號無,每個為一個點的長度):
=.=...=.=.=...=.=.=...=.=.=...=.......=.=.=.=...=.=.===
劃一般是三個點的長度;點劃之間的間隔是一個點的長度;字元之間的間隔就是三個點的長度;而單詞之間的間隔是七個點的長度。在剛開始的時候,初學者一般都會被教導傳送點劃間隔短小、短而快的字元,符號以及單詞之間也被誇大了間隔的時間。相比較來說,這種方式是更加容易被學會的
程式碼
[morse_code_implementation.py]{..\src\ciphers\morse_code_implementation.py}
"""
Prepare
1. sys.path 中增加 TheAlgorithms\src 子模組
"""
import sys
sys.path.append('E:\dev\AI\TheAlgorithms\src')
案例一:使用摩斯電碼 加密、解密碼
初始條件,定義 morse code 字典
Dictionary representing the morse code chart 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": "-----", "&": ".-...", "@": ".--.-.", ":": "---...", ",": "--..--", ".": ".-.-.-", "'": ".----.", '"': ".-..-.", "?": "..--..", "/": "-..-.", "=": "-...-", "+": ".-.-.", "-": "-....-", "(": "-.--.", ")": "-.--.-", # Exclamation mark is not in ITU-R recommendation "!": "-.-.--", }
from ciphers.morse_code_implementation import encrypt,decrypt
"""
"""
message = "Morse code here"
result = encrypt(message.upper())
print(result)
message = result
result = decrypt(message)
print(result)
-- --- .-. ... . / -.-. --- -.. . / .... . .-. .
MORSE CODE HERE