Traductor de código Morse en Python

El código Morse es un método para transmitir información de texto como una serie de tonos, luces o clics que pueden ser entendidos directamente por un oyente u observador experto sin equipo especial. Lleva el nombre de Samuel FB Morse, un inventor del telégrafo.

Algoritmo

El algoritmo es muy simple. Cada carácter en el idioma inglés se sustituye por una serie de ‘puntos’ y ‘guiones’ o, a veces, simplemente ‘punto’ o ‘guión’ singular y viceversa. 
Consulte esta imagen de Wikipedia para obtener más detalles.

Cifrado 

  1. En el caso del cifrado, extraemos cada carácter (si no el espacio) de una palabra de uno en uno y lo comparamos con su código morse correspondiente almacenado en cualquier estructura de datos que hayamos elegido (si está codificando en python, los diccionarios pueden resultar ser muy útil en este caso)
  2. Almacene el código morse en una variable que contendrá nuestra string codificada y luego agregaremos un espacio a nuestra string que contendrá el resultado.
  3. Al codificar en código morse, debemos agregar 1 espacio entre cada carácter y 2 espacios consecutivos entre cada palabra.
  4. Si el carácter es un espacio, agregue otro espacio a la variable que contiene el resultado. Repetimos este proceso hasta recorrer toda la string.

Descifrado

  1. En el caso del descifrado, comenzamos agregando un espacio al final de la string a decodificar (esto se explicará más adelante).
  2. Ahora seguimos extrayendo caracteres de la string hasta que no obtengamos ningún espacio.
  3. Tan pronto como obtengamos un espacio, buscamos el carácter del idioma inglés correspondiente a la secuencia de caracteres extraída (o nuestro código morse) y lo agregamos a una variable que almacenará el resultado.
  4. Recuerde que hacer un seguimiento del espacio es la parte más importante de este proceso de descifrado. Tan pronto como obtengamos 2 espacios consecutivos, agregaremos otro espacio a nuestra variable que contiene la string decodificada.
  5. El último espacio al final de la string nos ayudará a identificar la última secuencia de caracteres del código morse (ya que el espacio actúa como un control para extraer caracteres y comenzar a decodificarlos).

Implementación:

Python proporciona una estructura de datos llamada diccionario que almacena información en forma de pares clave-valor, lo cual es muy conveniente para implementar un cifrado como el código morse. Podemos guardar el gráfico del código morse en un diccionario donde (pares clave-valor) => (Caracteres ingleses-Código Morse) . El texto plano (caracteres ingleses) toma el lugar de las claves y el texto cifrado (código Morse) forma los valores de las claves correspondientes. Se puede acceder a los valores de las claves desde el diccionario de la misma forma que accedemos a los valores de un arreglo a través de su índice y viceversa.
 

Python3

# Python program to implement Morse Code Translator
 
'''
VARIABLE KEY
'cipher' -> 'stores the morse translated form of the english string'
'decipher' -> 'stores the english translated form of the morse string'
'citext' -> 'stores morse code of a single character'
'i' -> 'keeps count of the spaces between morse characters'
'message' -> 'stores the string to be encoded or decoded'
'''
 
# 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()

Producción:

--. . . -.- ... -....- ..-. --- .-. -....- --. . . -.- ... 
GEEKS-FOR-GEEKS

Este artículo es una contribución de Palash Nigam . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *