Experimentalia

Appunti raminghi

Golf programming: Ritorno al futuro

with 4 comments

Se l’ultima volta siamo andati indietro nel tempo fino ad Asterix ed i suoi irriducibili nemici, è tempo di tornare ai giorni nostri, o almeno risalire la catena del tempo fino all’epoca in cui gli arabi conquistarono mezza Europa, introdussero lo zero, e ci insegnarono a contare.

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 che vi chiedo di scrivere questo mese non deve fare altro che prendere in input una stringa di caratteri rappresentante un numero in caratteri romani e restituirne la rappresentazione usando le cifre arabe e la numerazione posizionale (i numeri come siamo abituati a scrivere fin dai primi anni di scuola)

Come l’altra volta l’input potrà andare da 1 a 3999 e non ci sarà bisogno di prevedere eventuali condizioni d’errore perché l’input si assumerà corretto e rientrante nel range appena specificato. Dopotutto scriviamo queste poche righe di codice per divertirci, la programmazione difensiva possiamo metterla da parte in queste occasioni.

Per lo stesso motivo i caratteri in input saranno solo caratteri maiuscoli (o esclusivamente minuscoli se per qualche recondito motivo vi venissero più comodi).

Non so quanto sia complicata questa sfida perché non solo, al solito, non ho ancora trovato il tempo di stendere la mia soluzione ma, contrariamente al solito, stavolta non mi sono fatto neanche la più pallida idea della linea d’attacco da usare. Immagino, però, che la soluzione dovrà essere elegante per essere concisa.

In compenso ho già in mente la sfida che aprirà il prossimo anno. Sarà un anno difficile

Written by Eineki

dicembre 3, 2009 a 5:04 am

Pubblicato su golf

Tagged with

4 Risposte

Subscribe to comments with RSS.

  1. Ho appena scritto la mia soluzione in Javascript è lunga 124 caratteri utili (con due spazi significativi).
    Al solito tra qualche giorno il post per dare il tempo a che volesse impegnarsi di scatenare la propria creatività.

    eineki

    dicembre 4, 2009 at 8:42 am

  2. Questa volta è stata durissima! Ho dovuto attingere a tutto il mio sapere su Ruby per ridurre all’osso l’algoritmo. Ho chiuso con 120 caratteri utilizzati.

    Il codice lo trovate qui: http://gist.github.com/249386

    Per eseguirlo basta copiarlo in un file *.rb e lanciarlo passando il numero romano come parametro:

    nomefile.rb MCMXXI

    Sandro Paganotti

    dicembre 4, 2009 at 22:58 pm

  3. Ho impiegato qualche giorno in più del previsto per postare la (mia) soluzione in javascript perché me l’ero persa.

    In compenso questa è lunga giusto 116 caratteri con i soliti due spazi significativi. Il resto è semplice indentazione.


    function k(r,s){
    m={M:1000,D:500,C:100,L:50,X:10,V:5,I:1};
    return r?s?(s<m[r[1]]?-s:s)
    +k(r.substr(1)):k(r,m[r[0]]):0
    }

    eineki

    dicembre 13, 2009 at 22:04 pm

  4. Noo! 4 caratteri meno dei miei!! Vediamo se riesco a spremere ancora un pò la mia soluzione !!

    Sandro Paganotti

    dicembre 13, 2009 at 22:38 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: