Una sera ti è capitato tra le mani un vecchio quaderno pieno di scarabocchi criptici, come se qualcuno stesse inseguendo un'idea in modo ossessivo. Su una pagina spiccava una sola domanda: Ogni numero può trovare la strada verso 1? Era legata a qualcosa chiamato Congettura di Collatz, un enigma che ha lasciato perplessi i pensatori per decenni.
Le regole erano ingannevolmente semplici. Scegli un numero intero positivo.
Poi ripeti questi passaggi con il risultato, continuando all'infinito.
La curiosità ti ha spinto a scegliere il numero 12 per provarlo, e così hai iniziato il viaggio:
12 ➜ 6 ➜ 3 ➜ 10 ➜ 5 ➜ 16 ➜ 8 ➜ 4 ➜ 2 ➜ 1
Partendo dal secondo numero (6), ci sono voluti 9 passaggi per arrivare a 1, e ogni volta che le regole si ripetevano il numero continuava a cambiare. All'inizio la sequenza sembrava imprevedibile: saltava su, giù, dappertutto. Eppure la congettura afferma che, qualunque sia il numero di partenza, si finisce sempre a 1.
Era affascinante, ma anche sconcertante. Perché sembra funzionare sempre? Potrebbe esistere un numero in cui il processo si rompe, ripetendosi all'infinito o fuggendo verso l'infinito? Il quaderno suggeriva che risolverlo avrebbe potuto rivelare qualcosa di profondo: e con esso attendono fama, fortuna e un posto nella storia chiunque riesca a svelarne i segreti.
Dato un numero intero positivo, restituisci il numero di passi necessari per arrivare a 1 secondo le regole della congettura di Collatz.
Per questo esercizio devi aggiungere un error set ComputationError che contiene l'errore IllegalArgument.
Ricorda di renderlo pubblico!
La funzione steps deve restituire ComputationError.IllegalArgument quando il suo input è uguale a zero.
Gli esercizi successivi di solito ometteranno istruzioni esplicite come questa. In generale, Exercism si aspetta che tu legga il file di test quando implementi la soluzione.
Per maggiori dettagli sugli errori in Zig, vedi:
Iscriviti a Exercism per imparare e padroneggiare Zig con 104 esercizi e il mentoring di persone reali, tutto gratis.