El código más corto para pasar todas las posibilidades gana.
En matemáticas, la persistencia de un número mide cuántas veces se debe aplicar una determinada operación a sus dígitos hasta que se alcanza cierta condición fija. Puede determinar la persistencia aditiva de un entero positivo sumando los dígitos del entero y repitiendo. Seguiría sumando los dígitos de la suma hasta que se encuentre un número de un solo dígito. El número de repeticiones que tomó para alcanzar ese número de un solo dígito es la persistencia aditiva de ese número.
Ejemplo usando 84523:
84523
8 + 4 + 5 + 2 + 3 = 22
2 + 2 = 4
It took two repetitions to find the single digit number.
So the additive persistence of 84523 is 2.
Se le dará una secuencia de enteros positivos de los que deberá calcular la persistencia aditiva. Cada línea contendrá un número entero diferente para procesar. La entrada puede estar en cualquier método de E / S estándar .
Para cada número entero, debe generar el número entero, seguido de un solo espacio, seguido de su persistencia aditiva. Cada entero procesado debe estar en su propia línea.
Casos de prueba
De entrada y salida
99999999999 3
10 1
8 0
19999999999999999999999 4
6234 2
74621 2
39 2
2677889 3
0 0
fuente
Respuestas:
K - 29 caracteres
La entrada es un nombre de archivo pasado como argumento, 29 caracteres sin incluir el nombre de archivo.
fuente
-1+#
=>#1_
Python 84 Chars
fuente
06234
.. resultado desafío exitoso :-)Haskell, 100 personajes
fuente
read.pure
lugar de(-48+).fromEnum
, ¡ pruébelo en línea!Python (93 bytes)
fuente
9
y err ...and
input()
lugar deint(raw_input())
....06234
.Casco ,
1015 bytes+5 bytes para requisitos de E / S horribles
Pruébalo en línea!
Explicación
Para admitir múltiples entradas, necesitamos usar
m(₁r)¶
(¿dónde₁
está la función haciendo el cálculo interesante?):La función
₁
hace lo siguiente:fuente
bash, 105 caracteres
Casi ningún golf realmente estuvo involucrado, pero no veo cómo mejorarlo.
fuente
Haskell - 114
fuente
pure
más(:[])
y la definición de un operador en lugar des
, probarlo en línea!Ruby, 85 caracteres
Tuve que tomar prestada la idea del "tamaño de la suma * 48" de Alex, porque es demasiado buena para perderla (al menos en Ruby).
fuente
Golfscript, 40 caracteres
fuente
J - 45 caracteres
Lecturas de stdin
fuente
^:a:
usarme pero no pude encontrar la documentación adecuada ... ¿alguna pista?a:
través del^:a:
truco en la J Reference Card [PDF]^:a:
que conocía: D^:(<'')
al principio (probablemente para Kaprekar), hasta que la vi en la tarjeta y aprendí sobrea:
la ocasión.c - 519
(o 137 si me acreditas por el marco ...)
En lugar de resolver solo esta operación, decidí producir un marco para resolver todos los problemas de persistencia .
Solo las dos líneas que comienzan
char*b
son exclusivas de este problema.Trata la entrada como cadenas, lo que significa que los "0" iniciales no son bandas antes de la etapa de salida.
Lo anterior ha tenido comentarios, verificación de errores e informes, y lectura de archivos (la entrada debe provenir de la entrada estándar) eliminada de:
Se podría ahorrar un poco más si estuviéramos dispuestos a perder memoria como un tamiz. Del mismo modo, mediante el
#define
retorno y similares, pero en este punto no me importa hacer que sea más feo.fuente
J, 74 caracteres
Ediciones
[:
a Ats@
0".
a".
simplifica las cosasP.ej
fuente
Creo que esto es lo mejor que se me ocurre.
Ruby 101 Chars
fuente
Caracteres PARI / GP 101
Desafortunadamente, no hay una función de entrada para GP, así que supongo que esto carece de la parte IO. :(Corregido: ¡Gracias Eelvex! :)fuente
input()
:)Javascript - 95
EDITAR: Whoops no hace las líneas múltiples
fuente
J 78
Solución recursiva. Lecturas de stdin. Escribe en stdout , así que déjame un poco de holgura: se necesitan 18 caracteres adicionales.
fuente
Perl - 77 caracteres
fuente
JavaScript ,
5747 bytes-10 bytes gracias a @ l4m2!
Pruébalo en línea!
fuente
f=(s,c=0)=>s>9?f([...s+""].reduce((x,y)=>x*1+y*1),++c):c
f=(s,c=0)=>s>9?f([...s+""].reduce((x,y)=>x- -y),++c):c
f=(s,c=0)=>s>9?f(eval([...s+""].join`+`)),++c):c
s>9
yeval
fueron grandes ideas. Creo que tenía un par extra allí, por lo que me salvó un total de 10 bytes :-)05AB1E , 13 bytes
Entrada como una lista de enteros.
Pruébalo en línea.
Explicación:
fuente
MathGolf , 11 bytes
Pruébalo en línea!
Increíblemente ineficiente, pero eso no nos importa. Básicamente, usando el hecho de que la persistencia aditiva de un número es menor o igual que el número mismo.Utiliza el hecho de que la persistencia aditiva es menor o igual que el número de dígitos del número. Pasa todos los casos de prueba con facilidad ahora.
El formato de entrada, aunque no es óptimo para algunos idiomas, es en realidad el método estándar de tomar múltiples casos de prueba como entrada en MathGolf. Cada línea de la entrada se procesa como su propia ejecución del programa, y la salida está separada por una nueva línea nueva para cada ejecución.
Explicación (usando
n = 6234
)fuente
K (ngn / k) , 16 bytes
Solución:
Pruébalo en línea!
Explicación:
fuente
Stax ,
811 bytesEjecutar y depurarlo
+3 bytes gracias a @Khuldraeseth (la primera respuesta no tuvo salida compatible)
fuente
i
en lugar deu
. Cumpliendo con las especificaciones draconianas de IO, esto se convierte en 11 bytes .scala 173:
fuente
Perl 5 , 65 bytes
Pruébalo en línea!
fuente
Java (OpenJDK 8) , 79 bytes
Pruébalo en línea!
Hay un potencial probable para seguir jugando al golf, pero lo investigaré en el futuro, pero por ahora, estoy bastante contento con este pequeño resultado.
fuente
Python 3 , 82 bytes
fuente
Tcl , 95 bytes
Pruébalo en línea!
fuente
Japt , 28 bytes
Pruébalo en línea!
fuente
PHP, 72 + 1 bytes
+1 para
-R
bandera.Corre como tubería con
-R
.$i
debe ser inicializado.(Además, no imprimiría nada en lugar de
0
dígitos únicos sin la inicialización).fuente
Bash + coreutils, 83 bytes
Pruébalo en línea!
Debe guardarse en un script llamado
a
y colocado en el sistemaPATH
, como se llama a sí mismo de forma recursiva. Toma información de la línea de comando, comoa 1999
. Devoluciones por código de salida.TIO tiene algunas limitaciones sobre lo que puede hacer con un script, por lo que hay un código repetitivo para que esto se ejecute en el encabezado.
Imprime un error para
stderr
una entrada más grande de lo que pueden manejar los enteros bash, pero dado que el cálculo real se realiza con cadenas, de todos modos sigue dando el resultado correcto.fuente