La congettura di Collatz postula che se prendi un numero intero positivo, ripeti il seguente algoritmo abbastanza volte:
if number is odd, then multiply by three and add one
if number is even, then divide by two
alla fine finirai su 1. Sembra sempre funzionare, ma non è mai stato provato che lo faccia sempre.
Hai già giocato a golf calcolando quanto tempo ci vuole per arrivare a 1 , quindi ho pensato di cambiare un po 'le cose.
Partendo da un dato intero positivo, calcola quanto tempo impiega per arrivare a 1 (il suo "tempo di arresto"). Quindi trova il tempo di arresto di quel numero.
Ripetere l'operazione fino a quando non si arriva a 1 o fino al limite completamente arbitrario di 100 iterazioni. Nel primo caso, stampa quante iterazioni ci sono volute. In quest'ultimo caso, stampa "Fail" o qualche altro output coerente di tua scelta, purché non sia un numero intero 1≤n≤100
. Non è possibile generare una stringa vuota per questa opzione. L'emissione di un numero intero al di fuori dell'intervallo [1, 100], tuttavia, è consentita.
Esempi:
Input: 2
2->1
Output: 1
Input: 5
5->5->5->5->5->...
Output: Fail
Input: 10
10->6->8->3->7->16->4->2->1
Output: 8
Input: 100
100->25->23->15->17->12->9->19->20->7->16->4->2->1
Output: 13
Input: 10^100
10^100->684->126->108->113->12->9->19->20->7->16->4->2->1
Output: 13
Input: 12345678901234567890
12345678901234567890->286->104->12->9->19->20->7->16->4->2->1
Output: 11
Input: 1
--Depending on your code, one of two things may happen. Both are valid for the purposes of this question.
1
Output: 0
--Or:
1->3->7->16->4->2->1
Output: 6
Come ho calcolato 10^100
e 12345678901234567890
usando una lingua che supporta solo reali per quella dimensione, se la tua lingua è più accurata potresti ottenere risultati diversi per quelli.
punteggio
Poiché si tratta di code-golf , vince la risposta con il minor numero di byte.