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 | 1001
Dobla 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
1001
Squash 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, 111110
ciclos 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.
Respuestas:
CJam, 34 bytes
Nada de lujos, solo aplica el mapa hasta que volvamos a la entrada e imprima el número de iteraciones que tomó.
Pruébalo aquí.
fuente
Python 2,
175154149 bytesEnlace de ideona
¡Gracias a agtoever por 27 bytes!
fuente
while i!=o|c==0
y suelta elif i==o:break
. Ahorra 5. Quizás (tenga en cuenta) que tampoco necesitaa
. Solo úsaloi
. Guarda una asignación (4 bytes). También la asignación de j se puede poner fuera del ciclo.while i!=c|c==0
reemplazo, pero aún así pude guardar algunos bytes con un estándar 'o'.Pyth, 21 bytes
Estoy escribiendo esto en mi teléfono, así que asegúrese de notificarme de cualquier error.
Pruébalo en línea.
fuente