モールス信号は、特別な機器を使用せずに、熟練した聞き手や観察者が直接理解できる一連のオン/オフ トーン、ライト、またはクリックとしてテキスト情報を送信する方法です。電信機の発明者であるサミュエル・F・B・モースにちなんで名付けられました。
アルゴリズム
アルゴリズムは非常にシンプルです。英語のすべての文字は、一連の「ドット」と「ダッシュ」、または場合によっては単数の「ドット」または「ダッシュ」で置き換えられ、またその逆も同様です。
こちらのウィキペディアを参照してください 画像 詳細については。
暗号化
- 暗号化の場合、単語から各文字 (スペースでない場合) を一度に 1 つずつ抽出し、選択したデータ構造に保存されている対応するモールス信号と照合します (Python でコーディングしている場合は、辞書で判明する可能性があります)。この場合に非常に役立ちます)
- エンコードされた文字列を含む変数にモールス信号を保存し、結果を含む文字列にスペースを追加します。
- モールス信号でエンコードする際には、各文字の間に 1 つのスペースを追加し、各単語の間に 2 つの連続するスペースを追加する必要があります。
- 文字がスペースの場合は、結果を含む変数に別のスペースを追加します。文字列全体を走査するまでこのプロセスを繰り返します
復号化
- 復号化の場合、まず、復号化する文字列の末尾にスペースを追加します (これについては後で説明します)。
- ここで、スペースがなくなるまで文字列から文字を抽出し続けます。
- スペースを取得するとすぐに、抽出された文字シーケンス (またはモールス信号) に対応する英語の文字を検索し、結果を保存する変数に追加します。
- スペースを追跡することが、この復号化プロセスの最も重要な部分であることに注意してください。 2 つの連続したスペースを取得したらすぐに、デコードされた文字列を含む変数に別のスペースを追加します。
- 文字列の末尾にある最後のスペースは、モールス信号文字の最後のシーケンスを識別するのに役立ちます (スペースは文字を抽出してデコードを開始するためのチェックとして機能するため)。
実装:
Python は、モールス信号などの暗号を実装するのに非常に便利なキーと値のペアの形式で情報を格納する辞書と呼ばれるデータ構造を提供します。モールス符号表を辞書に保存できます。 (キーと値のペア) => (英語文字 - モールス信号) 。平文 (英語の文字) がキーの代わりとなり、暗号文 (モールス信号) が対応するキーの値を形成します。インデックスを介して配列の値にアクセスするのと同じ方法で、キーの値に辞書からアクセスでき、その逆も同様です。
Python3
このモニターはどのくらいの大きさですか
# Python program to implement Morse Code Translator> '''> VARIABLE KEY> 'cipher' ->'英語文字列のモールス変換された形式を保存します'> 'decipher' ->'モールス信号の英語に翻訳された形式を保存します'> 'citext' ->'単一文字のモールス信号を保存します'> 'i' ->'モールス文字間のスペースの数を保持します'> 'message' ->'エンコードまたはデコードされる文字列を保存します'> '''> # 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'> :> '-----'> ,> ', '> :> '--..--'> ,> '.'> :> '.-.-.-'> ,> > '?'> :> '..--..'> ,> '/'> :> '-..-.'> ,> '-'> :> '-....-'> ,> > '('> :> '-.--.'> ,> ')'> :> '-.--.-'> }> # Function to encrypt the string> # according to the morse code chart> def> encrypt(message):> > cipher> => ''> > for> letter> in> message:> > if> letter !> => ' '> :> > # Looks up the dictionary and adds the> > # corresponding morse code> > # along with a space to separate> > # morse codes for different characters> > cipher> +> => MORSE_CODE_DICT[letter]> +> ' '> > else> :> > # 1 space indicates different characters> > # and 2 indicates different words> > cipher> +> => ' '> > return> cipher> # Function to decrypt the string> # from morse to english> def> decrypt(message):> > # extra space added at the end to access the> > # last morse code> > message> +> => ' '> > decipher> => ''> > citext> => ''> > for> letter> in> message:> > # checks for space> > if> (letter !> => ' '> ):> > # counter to keep track of space> > i> => 0> > # storing morse code of a single character> > citext> +> => letter> > # in case of space> > else> :> > # if i = 1 that indicates a new character> > i> +> => 1> > # if i = 2 that indicates a new word> > if> i> => => 2> :> > # adding space to separate words> > decipher> +> => ' '> > else> :> > # accessing the keys using their values (reverse of encryption)> > decipher> +> => list> (MORSE_CODE_DICT.keys())[> list> (MORSE_CODE_DICT> > .values()).index(citext)]> > citext> => ''> > return> decipher> # Hard-coded driver function to run the program> def> main():> > message> => 'GEEKS-FOR-GEEKS'> > result> => encrypt(message.upper())> > print> (result)> > message> => '--. . . -.- ... -....- ..-. --- .-. -....- --. . . -.- ... '> > result> => decrypt(message)> > print> (result)> # Executes the main function> if> __name__> => => '__main__'> :> > main()> |
>
クエリセレクター
>
出力:
--. . . -.- ... -....- ..-. --- .-. -....- --. . . -.- ... GEEKS-FOR-GEEKS>