Experimentalia

Appunti raminghi

Golf programming: Codice Morse

with one comment

L’altro giorno stavo curiosando tra i polverosi archivi di questo blog e mi sono ritrovato tra le mani un post della serie code-golf annunciato più volte e mai pubblicato. Rimedio adesso cominciando ufficialmente, la nuova serie di prove di golf.

Il codice Morse.

Croce e delizia di generazioni di radioamatori ordinari il codice morse è uno dei pilastri, permettetemi di dirlo, della moderna tecnologia. Noi ci prepariamo a demistificarlo costruendoci attorno il più piccolo programma che permetta di tradurre una stringa ascii in una sequenza di punti e linee pronta per essere trasmessa dal primo telegrafo su cui metterete le mani.

Un messaggio trasmesso utilizzando il codice morse usa un protocollo di comunicazione basato sul tempo. Una linea deve durare esattamente il triplo di un punto, il tempo da lasciar passare tra una lettera e l’altra corrisponde ad una linea, mentre ra i diversi simboli che compongono una lettere deve passare il tempo necessario a trasmettere un punto. Due parole sono separate tra loro da cinque punti di assenza di segnale. Non sto ad annoiarvi con questi ed altri dettagli, chi lo volesse può cominciare a leggere la pagina dedicata al codice morse su wikipedia, perché io stesso mi sono annoiato un po’ a leggerli. Cercherò semplicemente di trasporle in qualcosa che renda questa particolarità adatta a questo contest.

Le Regole

Si tratta delle solite regole, in ossequio al contesto le ho riportare con il copia e incolla :-) :

  1. Scrivere un programma, il più breve possibile, che risolva il problema enunciato prima e riportato meglio qui sotto;
  2. per ogni linguaggio utilizzato è considerato vincitore il programma scritto usando meno caratteri;
  3. l’efficienza dell’algoritmo non è un fattore fondamentale ma il programma deve terminare senza errori;
  4. si può optare, se più concisa, per una funzione, piuttosto che un programma intero;
  5. ovviamente non di vince niente se non la soddisfazione di aver accettato una sfida ed averla vinta.

L’algoritmo

Il programma/funzione deve poter tradurre semplici testi e quindi, i caratteri riconosciuti, gli unici da aspettarsi in input, sono le ventisei lettere (minuscole) dell’alfabeto più lo spazio. Niente numeri, niente segni d’interpunzione, niente lettere accentate o caratteri qualsivoglia esotici.
Dovrà stampare o restituire in output una stringa che rappresenti la codifica morse della stringa avuta in input.

Output

L’output del nostro esercizio di stile dovrà osservare alcune semplici caratteristiche:

  • I punti e le linee che rappresentano uno stesso carattere sono contigui;
  • tra due simboli appartenenti a lettere diverse deve essere inserito uno spazio;
  • uno spazio in input viene codificato con tre spazi in output;
  • un punto viene indicato con il carattere ‘.’, la linea con ‘-‘.

Per inciso ho scelto questi due caratteri, scartando ad esempio l’underscore ‘_’, perché sono consecutivi nel codice ascii (45 e 46). Non so se a qualcuno potrà essere d’aiuto questa particolarità ma ho pensato di sfruttarla.

Potete trovare la tabella di conversione sulla pagina wikipedia dedicata al codice Morse

Cos’altro dire: -… ..- — -. .-   ..-. — .-. – ..- -. .-

Written by Eineki

novembre 14, 2010 a 1:56 am

Pubblicato su golf

Una Risposta

Subscribe to comments with RSS.

  1. Rompo io il ghiaccio con la prima funzione. Si tratta di una funzione lunga 160158 caratteri utili. Chi riesce a fare di meglio?

    function m($l) {
      while(@$h=$l[$i++]) {
        $m=($c=strpos(" HVF-L-PJSURWIAE-TNMDKGOBXCYZQ",$h))-16;
          echo $c?strtr(base_convert($m,10,2),'10',$m<0?'.-':'-.').' ' : '  ';
        }
     }
    

    Eineki

    novembre 28, 2010 at 17:22 pm


Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: