Golf programming: Venerdi 13.

Siete capaci di scrivere un programma, nel linguaggio che più padroneggiate, per calcolare e stampare, dato un anno,  quali venerdì tredici ci sono dentro? Se pensate di rispondere si, potreste provare a scriverlo come se giocaste a golf (e poi, magari, potreste postare la vostra soluzione in un commento qui sotto).

Il golf programming è una disciplina per programmatori, consiste nello scrivere il programma più breve possibile per risolvere un determinato problema. Ho visto qualche prova a riguardo nel sito stackoverflow.com, in inglese, ed ho pensato di riproporla su queste pagine, giusto per sciogliere un po’ i muscoli delle dita e scrostare qualche ingranaggio del cervello.

Le regole sono semplicissime:

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

La sfida di oggi, come anticipato consiste nello scrivere un programma che, dato un anno di questo secolo (e quindi dal 2000 al 2099), stampi a video, o mostri su una pagina web, quali sono i venerdi 13, se ne esistono, che cadono in quell’anno. Non c’è bisogno di validare l’input (si assume che il dato in ingresso sia sempre valido) e l’elenco dei diversi giorni può essere separato dal carattere che ritenete più opportuno.L’anno deve essere nel formato a quattro cifre. Ovviamente non vale utilizzare funzioni predefinite che restiuiscono il giorno della settimana a partire da una data.

Ad esempio, per il 2009 bisogna stampare 13 Febbraio 2009, 13 Marzo 2009 o 13 Feb 2009, 13 Mar 2009 oppure, ancora 13/02/2009 , 13/03/2009

Se vi state chiedendo cosa ho fumato stasera per venirmene fuori con un problema del genere, sappiate che non fumo e che non ho visto, causa bidone,  il remake dell’omonimo film.

Aggiungeteci che il protagonista del film si chiama J(a)son e capirete perché la mia versione sarà scritta in javascript.

Per ora è tutto, domenica mattina, tra i commenti troverete la mia soluzione.

Uno spunto sugli algoritmi da utilizzare potete trovarlo in questa pagina in inglese sull’algoritmo del giorno del giudizio. E’ in inglese, ma un inglese talmente elementare che anche google riesce a tradurlo quasi decentemente 😉 Se qualcuno avesse riferimenti in italiano allo stesso algoritmo e volesse indicarli tra i commenti è sicuramente il benvenuto.

3 pensieri riguardo “Golf programming: Venerdi 13.

  1. La mia versione della funzione

    function f(y){a=[[[1,10],[4,7],[9,12],[6],[2,3,11],[8],[5]],[[1,4,7],[9,12],[6],[3,11],[2,8],[5],[10]]];
    b=(r=(t=y-2000)%4)?0:1;x=(t+((t-r)/4)-b)%7;m= a[b][x];
    for(e in m) document.write(m[e]+”/”+y+””);}

  2. procedure y (a char) is
    begin
    for i in 1 .. 366 loop
    if to_CHAR(’01-GEN-2000’+i,’D’)=5 and to_CHAR(’01-GEN-2000’+i,’DD’)= 17 then
    dbms_output.put_line(to_char(’01-GEN-2000’+i,’ddmmyyyy’);
    end loop;
    end;

    203 caratteri contro i tuoi 204!
    HA HA HA HA HA HA HA HA HA HA HA HA HA HA HA HA!!!
    HO VINTO IOOOOOOOOOOOOOOOOO!!!!
    IL MONDO è MIOOOOOOOOOOOOOOOOOOOOOOOOOOOO!!!
    whaaaaa whaaaaaaaaaaaa whaaaaaaaaaaaaaaa!!!

  3. Io però l’ho scritto con una mano sola 😉
    Per curiosità, che linguaggio hai usato?
    Come mai non usi il parametro a che passi alla procedura?

Lascia un commento