次のように、正の整数nに対して関数f(n)を定義します。
- n / 2、nが偶数の場合
- 3 * n + 1、nが奇数の場合
この関数を0より大きいnに繰り返し適用すると、結果は常に1に収束するように見えます(まだ誰も証明できていませんが)。このプロパティはCollatz予想と呼ばれます。
整数の停止時間を、1に達するまでCollatz関数fを通過する必要がある回数として定義します。最初の15個の整数の停止時間は次のとおりです。
1 0
2 1
3 7
4 2
5 5
6 8
7 16
8 3
9 19
10 6
11 14
12 9
13 9
14 17
15 17
Collatz cousinsと同じ停止時間で数字のセットを呼び出しましょう。たとえば、5と32はCollatzのいとこであり、停止時間は5です。
あなたのタスク:非負の整数を取り、その整数に等しい停止時間を持つCollatzのいとこのセットを生成するプログラムまたは関数を作成します。
入力
STDIN、ARGV、または関数引数を介して指定された非負の整数S。
出力
停止時間がSであるすべての数値のリスト。昇順でソートされています。リストはプログラムによって出力されるか、関数によって返されるか出力される場合があります。出力形式は柔軟性があります。スペース区切り、改行区切り、または言語の標準リスト形式は、数字が簡単に区別できる限りは問題ありません。
必要条件
提出は、S≤30に対して正しい結果を提供する必要があります。数時間または数日ではなく、数秒または数分で完了する必要があります。
例
0 -> 1
1 -> 2
5 -> 5, 32
9 -> 12, 13, 80, 84, 85, 512
15 -> 22, 23, 136, 138, 140, 141, 150, 151, 768, 832, 848, 852, 853, 904, 906, 908, 909, 5120, 5376, 5440, 5456, 5460, 5461, 32768
S = 30の場合の出力の要点を次に示します。
これはcode-golfです。バイト単位の最短プログラムが勝ちます。がんばろう!