Experimentalia

Appunti raminghi

Golf programming: Sono Pazzi Questi Romani

with 8 comments

E’ passato un mese dall’ultimo contest di golf programming. E’ arrivato il momendo di ricominciare a consumare, il meno possibile, le nostre tastiere per risolvere quello del mese di novembre.

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 da scrivere questa volta riguarda i numeri romani. Quelli che compaiono nelle prefazioni dei libri, per intenderci. O in qualche versione di latino o su centinaia di monumenti.

Questa volta bisogna scrivere un programma che conti, uno per riga, fino a 3999. Partiremo da 1 per arrivare fino a 3999 perché non è possibile, con i caratteri ascii, usare i caratteri romani per esprimere numeri più grandi di 4000. Non mi resta che lasciarvi al vostro compito con un link ad un file di riferimento con tutti la sequenza di numeri da replicare ed aspettare le vostre soluzioni.

La mia, al solito, tra circa una settimana tra i commenti.

Written by Eineki

novembre 2, 2009 a 4:38 am

Pubblicato su golf

8 Risposte

Subscribe to comments with RSS.

  1. mi sa che stavolta passo😦

    patrick

    novembre 2, 2009 at 10:20 am

  2. Non ti scoraggiare, è più facile di quel che sembra, e poi non ci sono limiti di tempo, magari tra qualche settimana ti viene lo sfizio di provare….

    eineki

    novembre 2, 2009 at 10:29 am

  3. 
    #!/usr/bin/python
    # -*- coding: ISO-8859-1 -*-
    import urllib
    a=urllib.urlopen("http://liberosoftware.net/numeriromani.txt")
    b=a.readlines()
    for i in range(len(b)):
        print b[i],
    

    Che ve ne pare?🙂 Lo so, ho giocato sporco, ma ottiene il risultato chiesto….

    È buono o devo cercare soluzioni più “lecite”?

    Urturino

    novembre 2, 2009 at 10:48 am

  4. Come sai non si vince niente, immagino che una soluzione più ortodossa, fermo restando che l’ortodossia con il golf programming non ha molto a che fare, possa darti qualche soddisfazione in più.

    In definitiva, però, l’unico giudice ultimo del tuo codice resti tu, e la spietata metrica del contare il numero dei caratteri.
    In bash avresti potuto fare qualcosa come
    #!/bin/bash
    lynx -source http://liberosoftware.net/numeriromani.txt

    eineki

    novembre 2, 2009 at 11:20 am

  5. La mia soluzione in ruby

    
    r=[['M',1000],['CM',900],['D',500],
       ['CD',400],['C',100],['XC',90],
       ['L',50],['XL',40],['X',10],
       ['IX',9],['V',5],['IV',4],
       ['I',1]]
    4000.times do |i|
      s = ''
      r.each do |a|
        while i >= a[1]
          i -= a[1]
          s = s + a[0]
        end
      end
      p s
    end
    

    Davide

    novembre 2, 2009 at 21:30 pm

  6. 175 caratteri contando l’indentazione

    
    v='M CM D CD C XC L XL X IX V IV I'.split(' ')
    for n in range(4000):
      s,i='',0
      for x in [1000,900,500,400,100,90,50,40,10,9,5,4,1]:
        while x<=n:s+=v[i];n-=x
        i+=1
      print s
    
    

    gg

    novembre 7, 2009 at 16:36 pm

  7. Il mio codice usa una tecnica ancora diversa. Mi piace quello che sta saltando fuori da questo contest

    
    x="00212223021112131442";
    l="  MMM CDCCCMXLXXXCIVIIIX";
    for(i=0;i++<3999;){
      for(n=('000'+i).substr(-4),j=0,s='';j<4;j++) 
        s+=l.substr(j*6+1*x[n[j]*2], x[n[j]*2+1]);
     document.writeln(s);
    }
    

    eineki

    novembre 8, 2009 at 23:36 pm

  8. Sono arrivato _decisamente_ in ritardo! In ogni caso ecco la mia soluzione, sono 154 caratteri. Yezz.

    sandro paganotti

    novembre 20, 2009 at 22:49 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: