Morseova abeceda je metóda prenosu textových informácií ako séria zapínaných a vypínacích tónov, svetiel alebo kliknutí, ktoré môže skúsený poslucháč alebo pozorovateľ priamo pochopiť bez špeciálneho vybavenia. Je pomenovaný po Samuelovi F. B. Morse, vynálezcovi telegrafu.
Algoritmus
Algoritmus je veľmi jednoduchý. Každý znak v anglickom jazyku je nahradený sériou „bodiek“ a „pomlčiek“ alebo niekedy len jednotného čísla „bodka“ alebo „pomlčka“ a naopak.
Pozrite si túto Wikipédiu obrázok pre podrobnosti.
Šifrovanie
- V prípade šifrovania extrahujeme každý znak (ak nie medzeru) zo slova jeden po druhom a porovnáme ho s príslušným morseovým kódom uloženým v akejkoľvek dátovej štruktúre, ktorú sme si vybrali (ak kódujete v pythone, slovníky sa môžu ukázať ako byť v tomto prípade veľmi užitočný)
- Morseovu abecedu uložíme do premennej, ktorá bude obsahovať náš zakódovaný reťazec a potom do nášho reťazca pridáme medzeru, ktorá bude obsahovať výsledok.
- Pri kódovaní v morzeovke musíme pridať 1 medzeru medzi každý znak a 2 po sebe idúce medzery medzi každé slovo.
- Ak je znakom medzera, pridajte ďalšiu medzeru do premennej, ktorá obsahuje výsledok. Tento postup opakujeme, kým neprejdeme celým reťazcom
Dešifrovanie
- V prípade dešifrovania začíname pridaním medzery na koniec reťazca, ktorý sa má dekódovať (toto bude vysvetlené neskôr).
- Teraz pokračujeme v extrakcii znakov z reťazca, až kým nedostaneme žiadne miesto.
- Hneď ako dostaneme medzeru, vyhľadáme zodpovedajúci anglický znak k extrahovanej sekvencii znakov (alebo našej morseovej abecede) a pridáme ho do premennej, ktorá uloží výsledok.
- Pamätajte, že sledovanie priestoru je najdôležitejšou súčasťou tohto procesu dešifrovania. Hneď ako dostaneme 2 po sebe idúce medzery, pridáme ďalšiu medzeru do našej premennej, ktorá obsahuje dekódovaný reťazec.
- Posledná medzera na konci reťazca nám pomôže identifikovať poslednú sekvenciu znakov morzeovky (keďže medzera funguje ako kontrola extrahovania znakov a začatia ich dekódovania).
Implementácia:
Python poskytuje dátovú štruktúru nazývanú slovník, v ktorej sú uložené informácie vo forme párov kľúč-hodnota, čo je veľmi výhodné na implementáciu šifry, akou je napríklad morzeovka. Morzeovu abecedu si môžeme uložiť do slovníka kde (páry kľúč – hodnota) => (anglické znaky – Morseova abeceda) . Čistý text (anglické znaky) nahrádza kľúče a šifrovaný text (Morseova abeceda) tvorí hodnoty zodpovedajúcich kľúčov. K hodnotám kľúčov je možné pristupovať zo slovníka rovnakým spôsobom, ako pristupujeme k hodnotám poľa cez ich index a naopak.
Python3
javafx na Eclipse
# Python program to implement Morse Code Translator> '''> VARIABLE KEY> 'cipher' ->'ukladá morzeovsky preloženú formu anglického reťazca'> 'decipher' ->'ukladá do angličtiny preloženú formu morseovho reťazca'> 'citext' ->'ukladá morzeovku jedného znaku'> 'i' ->'uchováva počet medzier medzi znakmi morse'> 'message' ->'ukladá reťazec, ktorý sa má zakódovať alebo dekódovať'> '''> # 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()> |
>
>
vlk alebo líška
Výkon:
--. . . -.- ... -....- ..-. --- .-. -....- --. . . -.- ... GEEKS-FOR-GEEKS>