Isso foi inspirado por um problema de matemática que vi em algum lugar na internet, mas não me lembro onde (UPDATE: O problema original foi encontrado no subreddit de enigmas matemáticos com uma prova, desde que seja possível, veja também este post do Math SE ), solicitando uma prova se o seguinte processo é possível para qualquer par arbitrário de números inteiros (pelo que me lembro, era possível para qualquer par):
Dado um par de números inteiros, j e k, dobre um deles e adicione um ao outro, resultando em um par de novos números inteiros, ou seja, (j, k) -> (j + 1, k * 2) ou (j * 2, k + 1). Em seguida, repita esse processo com esses números inteiros, com o objetivo de ter o par de números inteiros igual.
Estes exemplos fornecidos não são necessariamente ótimos, mas mostram como esse processo pode ser feito em números inteiros, positivos, negativos ou zero:
(2, 5) -> (3, 10) -> (6, 11) -> (12, 12)
(5, 6) -> (6, 12) -> (7, 24) -> (14, 25) -> (28, 26) -> (56, 27) -> (112, 28) -> (113, 56) -> (226, 57) -> (227, 114) -> (228, 228)
(0, 2) -> (1, 4) -> (2, 5) -> (3, 10) -> (6, 11) -> (12, 12)
(-4, 0) -> (-3, 0) -> (-2, 0) -> (-1, 0) -> (0, 0)
(3, -1) -> (6, 0) -> (12, 1) -> (13, 2) -> (14, 4) -> (15, 8) -> (16, 16)
(-4, -3) -> (-8, -2) -> (-16, -1) -> (-32, 0) -> (-31, 0) -> ... -> (0, 0)
Desafio
Crie um programa que, com dois números inteiros, produza a lista de etapas necessárias para tornar esses inteiros iguais incrementando repetidamente um e dobrando o outro
Especificações
- A solução não precisa ser ideal, mas deve resolver em um número finito de etapas para qualquer par arbitrário
A entrada deve ter dois números inteiros
Saída pode ser qualquer saída razoável que denota claramente os números inteiros resultantes de cada etapa, por exemplo:
- uma string com dois delimitadores distintos (qualquer símbolo, espaço em branco etc.), um para cada número inteiro em um par e um para cada par
- por exemplo, entrada j, k: 2, 5 -> saída: 3,10; 6,11; 12,12
- uma lista de listas de números inteiros
- por exemplo, entrada j, k: 2, 5 -> saída: [[3, 10], [6, 11], [12, 12]]
- uma string com dois delimitadores distintos (qualquer símbolo, espaço em branco etc.), um para cada número inteiro em um par e um para cada par
Se a entrada for um par de números iguais, você poderá produzir qualquer coisa, desde que seja consistente com outras respostas não triviais
- por exemplo
- se a entrada [2, 5] tiver saída [[3, 10], [6, 11], [12, 12]], que não inclui o par de entrada, a entrada [4, 4] não deve produzir nada.
- se a entrada [2, 5] tiver saída [[2, 5], [3, 10], [6, 11], [12, 12]], que inclui o par de entrada, a entrada [4, 4] deve saída [[4, 4]].
- por exemplo
Os métodos de IO padrão se aplicam e as brechas padrão são proibidas
Este é o código de golfe, então a resposta mais curta em bytes ganha
[(12,12),(6,11),(3,10),(2,5)]
para entrada (2,5)
?