Die Collatz-Vermutung ist eine sehr bekannte Vermutung. Nehmen Sie eine positive ganze Zahl; Wenn es gerade ist, dividieren Sie durch 2, andernfalls multiplizieren Sie mit 3 und addieren Sie 1. Wiederholen Sie diesen Vorgang, bis Sie erreichen 1oder etwas anderes passiert. Die Vermutung ist, dass dieser Prozess immer erreicht 1.
Sie können den Vorgang auch umkehren. Beginnen Sie mit 1, multiplizieren Sie mit 2 und verzweigen Sie zu multiply by 3 and add 1Zahlen, wenn Sie eine gerade Zahl erreichen 1 (mod 3), dh subtrahieren Sie 1 und dividieren Sie durch 3.
Ein Collatz-Pfad kombiniert die beiden und versucht, mit diesen vier Operationen von einer Zahl zur nächsten zu gelangen.
Zum Beispiel, um zu gelangen 20von 1:
1 *2
2 *2
4 *2
8 *2
16 *2
5 (-1)/3
10 *2
20 *2
Sie können erhalten auch 3von 10um 1 subtrahiert und dividiert durch 3.
Mit diesen Werkzeugen können Sie einen Collatz-Pfad von einer Zahl zur anderen durchlaufen. Zum Beispiel ist der Pfad von 20bis 3(durch 2 teilen) (1 subtrahieren, durch 3 teilen).
Kurz gesagt, die verfügbaren Operationen sind:
n * 2 always
n // 2 if n % 2 == 0
n * 3 + 1 if n % 2 == 1
(n-1) // 3 if n % 6 == 4
Hinweis: Nicht alle Collatz-Pfade sind kurz. a(7,3)könnte funktionieren
7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 2, 4, 8, 16, 5, 10, 3
aber ein kürzerer Weg ist
7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 3
Die Herausforderung
Finden Sie die Länge des kürzesten Collatz-Pfades zwischen zwei beliebigen positiven ganzen Zahlen pund q.
- Die Eingabe ist zwei beliebige positive Ganzzahlen kleiner als
2^20zur Vermeidung eines Ganzzahlüberlaufs. Die Eingabemethode liegt im Ermessen des Golfers. Die ganzen Zahlen können gleich sein. In diesem Fall ist die Länge des Collatz-Pfades gleich0. - Die Ausgabe sollte eine Ganzzahl sein und die Länge des kürzesten Collatz-Pfades zwischen
pund angebenq.
Testfälle
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
Vielen Dank an orlp für ihre Hilfe bei der Klärung dieser Herausforderung.
Wie immer, wenn das Problem unklar ist, lassen Sie es mich bitte wissen. Viel Glück und gutes Golfen!