En la teoría del caos , el mapa de herradura es un ejemplo de cómo surge el caos en un simple proceso de plegado y aplastamiento. Dice así: toma un pedazo imaginario de masa, dóblalo y finalmente aplástalo a su tamaño original. El caos surge en el patrón de cómo los trozos de masa terminan en la disposición final después de n iteraciones.
En nuestro caso, veremos cómo se comporta un patrón binario simple cuando lo doblamos y aplastamos . Estos son los pasos con un ejemplo de 8 bits (la representación binaria de 201 o 11001001).
Corte los bits en dos piezas de igual longitud (agregue un '0' al principio si hay un número impar de bits).
1100 | 1001Dobla la primera mitad sobre la segunda mitad. Tenga en cuenta que el orden de la primera mitad se invierte, ya que lo giramos mientras lo doblamos.
0011
1001Squash a su forma original. Mientras aplasta, los bits superiores se desplazan hacia la izquierda a los bits en su posición original.
01001011
Si repetimos esto para este ejemplo, podemos ver que después de 4 iteraciones, volvemos a la cadena de bits original:
Start bits: 11001001
Iteration 1: 01001011
Iteration 2: 01001101
Iteration 3: 01011001
Iteration 4: 11001001
Entonces, para el valor decimal de 201, el número de ciclos es 4.
El reto
- Escriba un programa completo que tome un número decimal como entrada y genere la cantidad de ciclos que se necesita para repetir en el proceso binario de squash-and-fold descrito anteriormente.
- La entrada (decimal) debe tomarse de stdin (rango: desde 1 hasta Googol o 10 ^ 100).
- La salida (decimal) debe escribirse en stdout.
- Su puntaje es el número de bytes de su código.
- Su respuesta debe comenzar con [Lenguaje de programación] - [Puntuación en bytes]
- Las lagunas estándar no están permitidas.
Ejemplos
7 --> 3
43 --> 5
178 --> 4
255 --> 1
65534 --> 1
65537 --> 12
1915195950546866338219593388801304344938837974777392666909760090332935537657862595345445466245217915 --> 329
Nota final
Lo interesante es que el número de ciclos está relacionado con la longitud de la representación binaria, a excepción de algunas excepciones donde el número de ciclos es más corto debido al patrón en la cadena de bits (por ejemplo, 111110ciclos después de 1 iteración). Esto crea una oportunidad interesante para optimizar la longitud del código utilizando el patrón subyacente en lugar de calcular el número de ciclos.
