Iteradors de Morse

El codi Morse és un mètode per a transmetre informació que utilitza seqüències d’elements curts (punts) i llargs (ratlles) separats per espais per representar les lletres, nombres, puntuació i altres caràcters especials d’un missatge. Volem traduir un missatge a Morse i també poder-los descodificar.

A tal efecte, seguiu els passos indicats:

  1. En un mòdul anomenat iter_morse.py, dissenyeu la funció dicc_morse(nomf) que donat el nom d’un fitxer que conté les equivalències entre caràcters i la seva codificació en Morse, amb el format descrit més avall, retorni dos diccionaris:

    • El primer diccionari, d1, farà correspondre a cada caràcter el codi Morse equivalent (una cadena de punts i ratlles). Així, per exemple, d1["m"] valdrà "--" i d1["x"] valdrà "-..-".

    • El segon diccionari, d2, contindrà la informació contrària; per exemple, d2["--"] valdrà "m" i d2[«-..-»] valdrà "x". Els valors de d2 no poden ser lletres majúscules, només minúscules.

    El fitxer a partir del qual es formen els dos diccionaris retornats ha de contenir a cada línia un caràcter, seguit de "|" i de la sequència de punts i ratlles equivalents en Morse. Vegeu el fitxer Media:internacional.morse com a exemple.

  2. Escriviu el generador iter_codif(s, dicc) de Python que produeixi la seqüència de codis Morse dels caràcters del string s, essent dicc un diccionari que indica com codificar cadascun dels caràcters de s (com és ara el primer dels dos diccionaris retornat per la funció anterior, d1). Els caràcters de s que no tinguin equivalència en el diccionari produiran "?" com a element de la seqüència.

  3. Dissenyeu la funció codifica(m, dicc) que donat un string m i un diccionari de codificació Morse dicc, retorni un altre string que serà l’equivalència en Morse del missatge m. Aquesta funció ha d’utilitzar obligatòriament l’iterador iter_codif. El string retornat serà tal que:

    • Els codis corresponents a lletres d’una mateixa paraula han d’anar separats per un sol espai en blanc.

    • Les paraules estaran separades per tres espais en blanc.

    • La darrera paraula serà el de final de missatge, anomenat AR (".-.-.").

    S’espera, per exemple, que amb el diccionari Morse habitual codifica('SOS', d) retorni el següent:

    <nowiki>"... --- ...   .-.-."</nowiki>
    
  4. Escriviu el generador iter_descodif(m, dicc) que rebi com a paràmetres un string m corresponent a una paraula codificada en Morse (és a dir, subsequëncies de "." i "-", corresponents a la codificació d’un caràter, separats per espai en blanc; també hi pot aparèixer el caràcter "?") i un diccionari dicc que indica com descodificar Morse (com el segon dels diccionaris retornat per la funció dicc_morse, d2). Aquest generador ha de produir la seqüència de caràcters corresponent a la descodificació del missatge m segons el diccionari dicc. Els codis no coneguts generaran "??" com a element de la seqüència.

  5. Dissenyeu la funció descodifica(m, dicc) que donat un string m, codificat en Morse com ho faria codifica, i un diccionari dicc de descodificació de Morse, retorni un altre string que sigui el missatge m descodificat. Aquesta funció ha d’utilitzar obligatòriament l’iterador iter_descodif. El string retornat ha de ser tal que:

    • Totes les lletres descodificades estiguin en minúscules.

    • No ha de contenir la traducció del codi de final de missatge.

    S’espera, per exemple, que amb el diccionari de descodificació Morse habitual,

    descodifica("... --- ...   .-.-.")
    

    retorni "sos".