Collatz予想は非常によく知られている予想です。正の整数をとります。偶数の場合は、2で割り、それ以外の場合は、3を掛けて1を加えます。到達する1
か、何か他のことが起こるまで繰り返します。推測では、このプロセスは常にに達し1
ます。
プロセスを逆にすることもできます。で開始し1
、2を掛け、multiply by 3 and add 1
数値に分岐するには1 (mod 3)
、偶数、つまり1に達したときに、1を引いて3で割ります。
Collatzパスは2つを組み合わせて、4つの演算で1つの数値から別の数値に移動しようとします。
たとえば、次の場所に移動するに20
は1
:
1 *2
2 *2
4 *2
8 *2
16 *2
5 (-1)/3
10 *2
20 *2
1を引いて3で割ることによっても、3
そこから得ることができ10
ます。
これらのツールを使用すると、ある番号から別の番号にCollatzパスをトラバースできます。例えば、からパス20
には、3
(3による除算、1を引く)、(2分周)です。
つまり、使用可能な操作は次のとおりです。
n * 2 always
n // 2 if n % 2 == 0
n * 3 + 1 if n % 2 == 1
(n-1) // 3 if n % 6 == 4
注:すべてのCollatzパスが短いわけではありません。a(7,3)
走れる
7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 2, 4, 8, 16, 5, 10, 3
しかし、より短いパスは
7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 3
チャレンジ
任意の2つの正の整数間の最短このCollatzパスの長さを見つけ、p
とq
。
- 入力は、
2^20
整数オーバーフローを回避するために、2未満の正の整数です。入力方法はゴルファーの裁量に任されています。整数は同じである場合があり0
ます。その場合、Collatzパスの長さはです。 - 出力は、
p
との間の最短Collatzパスの長さを示す1つの整数である必要がありq
ます。
テストケース
a(2,1)
1
a(4,1)
1 # 4 -> 1
a(3,1)
6 # 3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 1
a(11,12)
11 # 11 -> 34 -> 17 -> 52 -> 26 -> 13
# -> 40 -> 20 -> 10 -> 3 -> 6 -> 12
a(15,9)
20 # 46 -> 23 -> 70 -> 35 -> 106 -> 53 -> 160 -> 80 -> 40 -> 13
# -> 26 -> 52 -> 17 -> 34 -> 11 -> 22 -> 7 -> 14 -> 28 -> 9
この課題を明確にしてくれたorlpに感謝します。
いつものように、問題が不明な場合はお知らせください。幸運と良いゴルフを!