Il puzzle
Un piccolo puzzle che ho sentito mentre ero al liceo è andato qualcosa del genere ...
- L'interrogante mi chiederebbe di dargli un numero;
- Nel sentire il numero, l'interrogante lo farebbe ripetutamente (ad esempio, potrebbe dire che dieci è tre ) fino ad arrivare al numero 4 (a quel punto finirebbe con quattro è magico ).
- Qualsiasi numero sembra essere trasformabile in quattro alla fine, non importa quale.
L'obiettivo era cercare di capire la funzione di trasformazione e quindi essere in grado di sorvegliare in modo affidabile questo puzzle da soli.
La soluzione
La funzione di trasformazione in ogni fase era quella di
- Prendi il numero in questione,
- Contare il numero di lettere nella rappresentazione della parola inglese, ignorando un trattino o spazi o "e" (ad es. "Dieci" contiene 3 lettere, "trentaquattro" contiene 10 lettere, "centoquarantatre" contiene 20 lettere).
- Restituisci quel numero di lettere.
Per tutti i numeri che ho sempre voluto testare, questo converge a 4. Poiché "quattro" contiene anche quattro lettere, qui ci sarebbe un ciclo infinito; invece è semplicemente indicato come magia per convenzione per terminare la sequenza.
La sfida
La tua sfida è creare un pezzo di codice che leggerà un numero dall'utente e quindi stampare le righe che mostrano la funzione di trasformazione applicata ripetutamente fino a quando non viene raggiunto "quattro è magico".
Nello specifico:
- Le soluzioni devono essere programmi completi in sé e per sé. Non possono essere semplicemente funzioni che prendono un fattore numero nell'input.
- L'input deve essere letto dallo standard input. (Il piping da "echo" o l'utilizzo del reindirizzamento dell'input va bene poiché anche questo va da stdin)
- L'input dovrebbe essere in formato numerico.
- Per ogni applicazione della funzione di trasformazione, dovrebbe essere stampata una riga:,
a is b.
dove aeb sono forme numeriche dei numeri nella trasformazione. - I punti fermi (periodi) SONO obbligatori!
- L'ultima riga dovrebbe naturalmente dire
4 is magic.
. - Il codice dovrebbe produrre un output corretto per tutti i numeri da 0 a 99 .
Esempi:
> 4
4 is magic.
> 12
12 is 6.
6 is 3.
3 is 5.
5 is 4.
4 is magic.
> 42
42 is 8.
8 is 5.
5 is 4.
4 is magic.
> 0
0 is 4.
4 is magic.
> 99
99 is 10.
10 is 3.
3 is 5.
5 is 4.
4 is magic.
Il vincitore è la presentazione più breve in base al numero di caratteri del codice sorgente, che è anche corretto .
BONUS
Puoi anche provare a scrivere una versione del codice che stampa i NOMI INGLESI per i numeri con ciascuna applicazione della funzione di trasformazione. L'input originale è ancora numerico, ma le righe di output dovrebbero avere la forma della parola del numero.
(Doppio bonus per disegnare forme con il tuo codice)
(EDIT) Alcuni chiarimenti:
- Voglio che la parola appaia su entrambi i lati in tutti i casi applicabili, ad es
Nine is four. Four is magic.
- Non mi interessa l'uso delle maiuscole, però. E non mi interessa come separare le parole token, anche se dovrebbero essere separate:
ninety-nine
va bene,ninety nine
va bene,ninetynine
non va bene.
Considero questi una categoria separata per la competizione bonus per quanto riguarda la sfida, quindi se scegli questo, non preoccuparti che il tuo codice sia più lungo della versione numerica.
Sentiti libero di inviare una soluzione per ogni versione.