Questa volta sono qui per lanciarvi una sfida! Ovviamente sarà una “competizione” costruttiva (ne usciremo tutti vincitori!).
L’idea mi è venuta da un messaggio che ho inviato io stesso su Twitter: come calcolare gli anni bisestili in newLisp.
Bene, l’idea è semplice: inviatemi…
1) Una funzione, più corta possibile (fatto in newLisp ovviamente!) per calcolare l’anno bisestile (in pure “stile” Twitter, dove ogni singolo carattere è preziosissimo!)
2) Fare un altro programma che calcola e mostra SOLO anni bisestili dei primi 1000000 anni di vita (da 0 a 1000000). Si, avete capito bene: il primo MILIONE di anni!
Ripeto: non voglio una corrispondenza completa, ma SOLO gli anni effettivamente bisestili!
Gli anni non dovranno essere mostrati a video, ma memorizzati in una lista.
Esempio:
> (setq anni '()) (dotimes (i 50) (if (leap i) (push i anni -1))) > anni (0 4 8 12 16 20 24 28 32 36 40 44 48)
Nell’esempio, la lista anni contiene gli anni bisestili dei primi 50 anni (0->50). Bene: fate lo stesso, il più velocemente possibile, con il primo milione di anni :-)
Vi ricordo che per misurare le performance, newLisp offre la comoda funzione (time).
Mandatemi i vostri risultati sotto forma di commenti a questo articolo!
Buon lavoro!
Translate To English!
(define (leap y)
(or (and (= 0 (% y 4))
(!= 0 (% y 100)))
(= (% y 400) 0)))
looks like yours, though…
Good! Not faster, but shorter than mine!
Well, I will post a Twitter comment about functions for floating point numbers and integer ones!