A conjectura de Collatz é uma conjectura muito conhecida. Pegue um número inteiro positivo; se for par, divida por 2; caso contrário, multiplique por 3 e adicione 1. Repita até chegar 1
ou algo acontecer. A conjectura é que esse processo sempre alcança 1
.
Você também pode reverter o processo. Comece em 1
, multiplique por 2 e ramifique para multiply by 3 and add 1
números, quando atingir um número par 1 (mod 3)
, subtraia 1 e divida por 3.
Um caminho Collatz combina os dois, tentando passar de um número para outro com essas quatro operações.
Por exemplo, para ir 20
de 1
:
1 *2
2 *2
4 *2
8 *2
16 *2
5 (-1)/3
10 *2
20 *2
Você também pode obter a 3
partir 10
subtraindo 1 e dividindo por 3.
Com essas ferramentas, você pode percorrer um caminho Collatz de um número para outro. Por exemplo, o caminho de 20
para 3
é (dividir por 2), (subtrair 1, dividir por 3).
Em resumo, as operações disponíveis são:
n * 2 always
n // 2 if n % 2 == 0
n * 3 + 1 if n % 2 == 1
(n-1) // 3 if n % 6 == 4
Nota: nem todos os caminhos da Collatz são curtos. a(7,3)
poderia correr
7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 2, 4, 8, 16, 5, 10, 3
mas um caminho mais curto é
7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 3
O desafio
Encontre o comprimento do caminho Collatz mais curto entre dois inteiros positivos p
e q
.
- Entrada é dois inteiros positivos menores que
2^20
para evitar o excesso de números inteiros. O método de entrada é deixado a critério do jogador de golfe. Os números inteiros podem ser os mesmos; nesse caso, o comprimento do caminho da Collatz é0
. - A saída deve ser um número inteiro, indicando o comprimento do caminho Collatz mais curto entre
p
eq
.
Casos de teste
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
Muito obrigado ao orlp por sua ajuda no esclarecimento deste desafio.
Como sempre, se o problema não estiver claro, entre em contato. Boa sorte e bom golfe!