Гипотеза Коллатца постулирует, что если вы возьмете любое натуральное число, то повторите этот алгоритм достаточно много раз:
if number is odd, then multiply by three and add one
if number is even, then divide by two
в конечном итоге вы получите 1. Это, кажется, всегда работает, но никогда не было доказано, что это всегда работает.
Вы уже играли в гольф, рассчитывая, сколько времени потребуется, чтобы добраться до 1 , поэтому я решил немного изменить ситуацию.
Начиная с заданного положительного целого числа, рассчитайте, сколько времени потребуется, чтобы добраться до 1 (его «время остановки»). Затем найдите время остановки этого номера.
Повторяйте, пока не дойдете до 1, или пока не дойдете до совершенно произвольного предела в 100 итераций. В первом случае выведите, сколько итераций потребовалось. В последнем случае выведите «Fail» или другой согласованный вывод по вашему выбору, если он не является целым числом 1≤n≤100
. Вы не можете вывести пустую строку для этой опции. Вывод целого числа вне диапазона [1, 100], однако, разрешен.
Примеры:
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
Как я рассчитал 10^100
и 12345678901234567890
использовал язык, который поддерживает только реалы для этого размера, если ваш язык более точный, вы можете получить разные результаты для них.
счет
Поскольку это код-гольф , выигрывает ответ с кратчайшим количеством байтов.