(Esto puede ser bastante clásico, pero esta es mi primera publicación aquí, así que todavía no estoy listo para las cosas elegantes)
La secuencia de Goodstein se define para un número de entrada de la siguiente manera:
Elija un número inicial n , deje b = 2 y repita:
- de escritura n en la base de heriditary b notación
- sustituya todos los ( b ) sa ( b +1) s en ny reste 1
- generar la nueva evaluación decimal de n
- incremento b
La notación de base hereditaria es una descomposición de un número donde la base es el número más grande que aparece. Ejemplos:
83
en HB3:3^(3+1)+2
226
en HB2:2^(2^(2+1))+2^(2+1)+2
Las secuencias de Goodstein siempre terminan en 0 , pero primero tienden a crecer bastante rápido, por lo que no se le pide que muestre la secuencia completa.
Tarea:
Dado un número de entrada en cualquier formato razonable, su trabajo es generar la secuencia de Goodstein para este número al menos hasta que llegue a 10 ^ 25 o 0
Ejemplos:
Input: 3
Output: 3, 3, 3, 2, 1, 0
Input: 13
Output: 13, 108, 1279, 16092, 280711, 5765998, 134219479, 3486786855, 100000003325, 3138428381103, 106993205384715, 3937376385706415, 155568095557821073, 6568408355712901455, 295147905179352838943, 14063084452067725006646, 708235345355337676376131, 37589973457545958193377292
Input: 38
Output: 38, 22876792454990
Detalles:
- El número de entrada puede ser una matriz, una cadena, un entero, siempre que esté en base decimal
- La salida sigue la misma regla
- La separación de los términos en la salida puede ser espacios, líneas nuevas o cualquier separación razonable
- Tan pronto como la secuencia sea mayor de 10 ^ 25, su programa puede salir normalmente, generar un error / excepción o continuar (sin restricción)
- Este es el código de golf , por lo que gana la respuesta más corta (en bytes)
- Por supuesto, las lagunas estándar están prohibidas
- Ejemplo de trabajo de Python sin golfista aquí
int(q/base.b), q%base.b
debe serq//base.b, q%base.b
(o simplementedivmod(q, base.b)
) para evitar errores de punto flotante.Respuestas:
Pyth ,
2826 bytesLa nueva línea final es significativa.
Pruébalo en línea! (Este enlace incluye un extra que
Q
no necesita la versión actual de Pyth).Cómo funciona
Es importante que
y
se redefina en cada iteración de bucle para evitar la memorización de los cambios en la variable globalJ
.fuente
Haskell , 77 bytes
(&2)
es una función anónima que tomaInteger
y devuelve una lista (potencialmente muy larga) deInteger
s, use as(&2) 13
.Pruébalo en línea! (corta a
10^25
)Cómo funciona
(&2)
comienza la secuencia con base2
.n&b
calcula la subsecuencia comenzando con el númeron
y la baseb
.n<0
, que generalmente sucede el paso siguienten==0
.n
a la lista devuelta recursivamente por la expresión(0?n-1)&(b+1)
.?
es un operador de función local.0?n
da el resultado de convertirn
a base hereditariab
, luego incrementa la base en todas partes.e
seguimiento del exponente actual.e?n
Convierte el númeron*b^e
.0
cuandon==0
.n
por la baseb
.(e+1)?div n b
maneja la recursividad para el cociente y el siguiente exponente más alto.mod n b*(b+1)^0?e
maneja el resto (que es el dígito correspondiente al exponente actuale
), el incremento de base y la conversión hereditaria del exponente actual con0?e
.fuente