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 1o 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 1nú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 20desde 1:
1 *2
2 *2
4 *2
8 *2
16 *2
5 (-1)/3
10 *2
20 *2
También puede llegar 3desde 10restando 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 20a 3es (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, py q.
- La entrada es cualquiera de los dos enteros positivos menos que
2^20para 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
pyq.
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!