このCollatz推測あなたは任意の正の整数を取る場合は、以下のアルゴリズム十分な回数繰り返すこと公準:
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
あなたの言語は、あなたがそれらのために異なる結果を得ることができ、より正確である場合にのみ、その大きさのために実数をサポートする言語を使用して。
得点
これはcode-golfであるため、バイト数が最も少ない答えが優先されます。