Morsekoodi on tapa lähettää tekstitietoa sarjana päälle-pois-ääniä, valoja tai napsautuksia, jotka taitava kuuntelija tai tarkkailija voi ymmärtää suoraan ilman erikoislaitteita. Se on nimetty lennättimen keksijän Samuel F. B. Morsen mukaan.
Algoritmi
Algoritmi on hyvin yksinkertainen. Jokainen englannin kielen merkki on korvattu sarjalla 'pisteitä' ja 'viivoja' tai joskus vain yksittäisiä 'piste' tai 'viiva' ja päinvastoin.
Katso tästä Wikipediasta kuva yksityiskohtia varten.
Salaus
- Salauksen tapauksessa poimimme jokaisen merkin (jos ei välilyönnin) sanasta yksi kerrallaan ja yhdistämme sen vastaavaan morsekoodiin, joka on tallennettu mihin tahansa valitsemamme tietorakenteeseen (jos koodaat pythonilla, sanakirjat voivat näyttää olla erittäin hyödyllinen tässä tapauksessa)
- Tallenna morsekoodi muuttujaan, joka sisältää koodatun merkkijonomme, ja lisäämme sitten välilyönnin merkkijonoamme, joka sisältää tuloksen.
- Morsekoodia koodattaessa meidän on lisättävä 1 välilyönti jokaisen merkin väliin ja 2 peräkkäistä välilyöntiä jokaisen sanan väliin.
- Jos merkki on välilyönti, lisää toinen välilyönti tuloksen sisältävään muuttujaan. Toistamme tätä prosessia, kunnes kuljemme koko merkkijonon läpi
Salauksen purku
- Salauksen purkamisen tapauksessa aloitamme lisäämällä välilyönnin dekoodattavan merkkijonon loppuun (tämä selitetään myöhemmin).
- Nyt jatkamme merkkien poimimista merkkijonosta, kunnes emme saa tilaa.
- Heti kun saamme välilyönnin, etsimme vastaavan englanninkielisen merkin purettuun merkkijonoon (tai morsekoodiimme) ja lisäämme sen muuttujaan, joka tallentaa tuloksen.
- Muista, että tilan seuraaminen on tämän salauksenpurkuprosessin tärkein osa. Heti kun saamme 2 peräkkäistä välilyöntiä, lisäämme uuden välilyönnin muuttujaamme, joka sisältää dekoodatun merkkijonon.
- Merkkijonon lopussa oleva viimeinen välilyönti auttaa meitä tunnistamaan viimeisen morsekoodin merkkijonon (koska välilyönti toimii tarkistusmerkkinä merkkien poimimiselle ja niiden dekoodaamiselle).
Toteutus:
Python tarjoaa tietorakenteen, jota kutsutaan sanakirjaksi, joka tallentaa tiedot avain-arvo-parien muodossa, mikä on erittäin kätevää salauksen, kuten morse-koodin, toteuttamiseen. Voimme tallentaa morsekoodikaavion sanakirjaan, jossa (avain-arvo-parit) => (englanninkieliset merkit-morsekoodi) . Selkeä teksti (englanninkieliset merkit) korvaa avaimet ja salateksti (Morse-koodi) muodostaa vastaavien näppäinten arvot. Avainten arvot ovat saatavilla sanakirjasta samalla tavalla kuin taulukon arvot niiden indeksin kautta ja päinvastoin.
Python 3
kuinka muuttaa merkkijono kokonaisluvuksi
ei tulosignaalia
# Python program to implement Morse Code Translator> '''> VARIABLE KEY> 'cipher' ->'tallentaa englanninkielisen merkkijonon morse-käännetyn muodon'> 'decipher' ->'Tallentaa morse-merkkijonon englanninkielisen käännetyn muodon'> 'citext' ->'tallentaa yhden merkin morsekoodin'> 'i' ->'pitää laskea välilyönnit morsemerkkien välillä'> 'message' ->'tallentaa koodattavan tai dekoodattavan merkkijonon'> '''> # 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()> |
>
>
Lähtö:
--. . . -.- ... -....- ..-. --- .-. -....- --. . . -.- ... GEEKS-FOR-GEEKS>