Golf programming: Sono Pazzi Questi Romani

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.

8 pensieri riguardo “Golf programming: Sono Pazzi Questi Romani

  1. 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….

  2. 
    #!/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”?

  3. 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

  4. 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
    
  5. 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
    
    
  6. 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);
    }
    

Rispondi

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

Logo di WordPress.com

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

Google photo

Stai commentando usando il tuo account Google. 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 )

Connessione a %s...