Track
/
Python
Python
/
Esercizi
/
Congettura di Collatz
Congettura di Collatz

Congettura di Collatz

Facile

Introduzione

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.

  • Se è pari, dividilo per 2.
  • Se è dispari, moltiplicalo per 3 e aggiungi 1.

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.

Istruzioni

Dato un numero intero positivo, restituisci il numero di passi necessari per arrivare a 1 secondo le regole della congettura di Collatz.

Messaggi di eccezione

A volte è necessario sollevare un'eccezione. Quando lo fai, dovresti sempre includere un messaggio di errore significativo per indicare qual è l'origine dell'errore. Questo rende il codice più leggibile e aiuta molto nel debug. Nelle situazioni in cui sai che l'origine dell'errore sarà di un certo tipo, puoi scegliere di sollevare uno dei tipi di errore predefiniti, ma dovresti comunque includere un messaggio significativo.

La congettura di Collatz riguarda solo i numeri interi strettamente positivi, quindi questo esercizio si aspetta che tu usi l'istruzione raise e «lanci» un ValueError nella soluzione se il valore dato è zero o un intero negativo. I test passeranno solo se fai raise dell'exception e aggiungi anche un messaggio.

Per sollevare un ValueError con un messaggio, scrivi il messaggio come argomento del tipo di exception:

# example when argument is zero or a negative integer
raise ValueError("Only positive integers are allowed")

Fonte

WikipediaIl link si apre in una nuova finestra o scheda
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Python Exercism

Vuoi iniziare Congettura di Collatz?

Iscriviti a Exercism per imparare e padroneggiare Python con 17 concetti146 esercizi e il mentoring di persone reali, tutto gratis.