La conjetura de Collatz es una conjetura muy conocida. Toma un entero positivo; si es par, divida por 2, de lo contrario, multiplique por 3 y agregue 1. Repita hasta que llegue 1
o algo más suceda. La conjetura es que este proceso siempre llega 1
.
También puedes revertir el proceso. Comience en 1
, multiplique por 2 y bifurque a multiply by 3 and add 1
números, cuando llegue a un número par 1 (mod 3)
, es decir , reste 1 y divida por 3.
Un camino de Collatz combina los dos, tratando de pasar de un número a otro con esas cuatro operaciones.
Por ejemplo, para llegar 20
desde 1
:
1 *2
2 *2
4 *2
8 *2
16 *2
5 (-1)/3
10 *2
20 *2
También puede llegar 3
desde 10
restando 1 y dividiendo entre 3.
Con estas herramientas, puede recorrer una ruta de Collatz de un número a otro. Por ejemplo, la ruta de 20
a 3
es (dividir por 2), (restar 1, dividir por 3).
En resumen, las operaciones disponibles son:
n * 2 always
n // 2 if n % 2 == 0
n * 3 + 1 if n % 2 == 1
(n-1) // 3 if n % 6 == 4
Nota: no todos los caminos de Collatz son cortos. a(7,3)
podría funcionar
7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 2, 4, 8, 16, 5, 10, 3
pero un camino más corto es
7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 3
El reto
Encuentre la longitud del camino Collatz más corto entre dos enteros positivos, p
y q
.
- La entrada es cualquiera de los dos enteros positivos menos que
2^20
para evitar el desbordamiento de enteros. El método de entrada queda a discreción del golfista. Los enteros pueden ser los mismos, en cuyo caso, la longitud de la ruta de Collatz es0
. - La salida debe ser un número entero, indicando la longitud del camino Collatz más corto entre
p
yq
.
Casos de prueba
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
Muchas gracias a orlp por su ayuda para aclarar este desafío.
Como siempre, si el problema no está claro, hágamelo saber. ¡Buena suerte y buen golf!