Em teoria do caos , o mapa de ferradura é um exemplo de como caos surge num simples processo de dobragem e esmagamento. É assim: pegue uma massa imaginária, dobre-a e, finalmente, amasse-a no tamanho original. O caos surge no padrão de como os pedaços de massa terminam no arranjo final após n iterações.
No nosso caso, veremos como um padrão binário simples se comporta quando dobramos e esmagamos . Aqui estão as etapas com um exemplo de 8 bits (a representação binária de 201 ou 11001001).
Corte os bits em dois pedaços de igual comprimento (adicione um '0' no início, se houver um número ímpar de bits).
1100 | 1001Dobre a primeira metade sobre a segunda metade. Observe que a ordem da primeira metade é invertida, à medida que a giramos enquanto dobra.
0011
1001Squash para sua forma original. Enquanto esmagam, os bits superiores são deslocados para a esquerda para os bits sob sua posição original.
01001011
Se repetirmos este exemplo, podemos ver que, após 4 iterações, voltamos à cadeia de bits original:
Start bits: 11001001
Iteration 1: 01001011
Iteration 2: 01001101
Iteration 3: 01011001
Iteration 4: 11001001
Portanto, para o valor decimal de 201, o número de ciclos é 4.
O desafio
- Escreva um programa completo que use um número decimal como entrada e produza o número de ciclos necessários para repetir no processo bifurcado e dobrado binário descrito acima.
- A entrada (decimal) deve ser obtida de stdin (intervalo: de 1 a Googol ou 10 ^ 100).
- A saída (decimal) deve ser gravada em stdout.
- Sua pontuação é o número de bytes do seu código.
- Sua resposta deve começar com [Linguagem de programação] - [Pontuação em bytes]
- As brechas padrão não são permitidas.
Exemplos
7 --> 3
43 --> 5
178 --> 4
255 --> 1
65534 --> 1
65537 --> 12
1915195950546866338219593388801304344938837974777392666909760090332935537657862595345445466245217915 --> 329
Nota final
O interessante é que o número de ciclos está relacionado ao comprimento da representação binária, exceto por algumas exceções em que o número de ciclos é mais curto devido ao padrão na cadeia de bits (por exemplo, 111110ciclos após 1 iteração). Isso cria uma oportunidade interessante para otimizar o comprimento do código usando o padrão subjacente em vez de calcular o número de ciclos.
