El loco matemático posee una amplia colección de números y, por lo tanto, el espacio que le queda es bastante limitado. Para salvar a algunos, debe doblar sus enteros, pero desafortunadamente es muy vago. Su tarea, si desea ayudarlo, es crear una función / programa que pliegue un entero positivo dado para nuestro número loco.
¿Cómo doblar un número entero?
Si es divisible por la suma de sus dígitos, divídalo por la suma de sus dígitos. Si no cumple con ese requisito, tome su resto cuando se divida por la suma de sus dígitos. Repita el proceso hasta que llegue el resultado 1
. El número entero plegado es el número de operaciones que tuvo que realizar. Tomemos un ejemplo (digamos 1782
):
Obtener la suma de sus dígitos:
1 + 7 + 8 + 2 = 18
.1782
es divisible por18
, entonces el siguiente número es1782 / 18 = 99
.99
No es divisible por9 + 9 = 18
, por lo tanto, tomamos el resto:99 % 18 = 9
.9
obviamente es divisible por9
, entonces lo dividimos y obtenemos1
.
El resultado es 3
, porque se necesitaron 3 operaciones para llegar 1
.
Reglas y especificaciones
Algunos enteros pueden tener la suma de dígitos igual a
1
, como10
o100
. Su programa no necesita manejar tales casos. Eso significa que se le garantizará que el entero dado como entrada no tiene la suma de dígitos igual a1
, y ninguna operación con el entero dado dará como resultado un número cuya suma de dígitos es1
(a excepción de1
sí mismo, que es el " objetivo"). Por ejemplo, nunca recibirá10
ni20
como entrada.La entrada será un número entero positivo mayor que
1
.Se aplican las lagunas predeterminadas .
Puede tomar entrada y proporcionar salida por cualquier medio estándar .
Casos de prueba
Entrada -> Salida 2 -> 1 5 -> 1 9 -> 1 18 -> 2 72 -> 2 152790 -> 2 152 -> 3 666 -> 3 777 -> 3 2010 -> 3 898786854 -> 4
Aquí hay un programa que le permite visualizar el proceso y probar más casos de prueba.
Este es el código de golf , por lo que gana el código más corto en cada idioma (puntuado en bytes).
8987868546
es una entrada válida, romperá su herramienta de prueba, y también muchas (si no todas) las respuestas ...898786854
, no8987868546
(ha agregado un6
al final)8987868546
no es 1 (se cumple la Regla 1 ) y8987868546
es un entero positivo mayor que 1 ( Se cumple la Regla 2 ).Respuestas:
05AB1E ,
1312 bytesPruébalo en línea!
Explicación
fuente
Python 2 ,
6357 bytes-1 gracias a totalmente humano
-1 gracias al Sr. Xcoder
-4 gracias a reffu
Pruébalo en línea!
fuente
Haskell,
8578 bytesGuardado 7 bytes gracias a Bruce Forte.
Pruébalo en línea.
fuente
divMod
y soltandowhere
: ¡ Pruébelo en línea!where
. Usaré esto en el futuro. :)sum[read[d]|d<-show n]
guarda un byteJavaScript (ES6),
66585149 bytesToma la entrada como un entero. Las devoluciones
false
de0
o1
y lanza un error de desbordamiento cuando se encuentra con cualquier número cuyos dígitos suman1
.Pruébalo
fuente
eval(array.join`+`)
?Casco , 12 bytes
Pruébalo en línea!
Explicación
fuente
C # (.NET Core) , 87 bytes
Pruébalo en línea!
Función lambda que toma y devuelve un entero.
fuente
Japt ,
221917 bytes-3 bytes gracias a @Shaggy.
-2 bytes gracias a @ETHproductions
Pruébalo en línea!
fuente
s_¬
aì
para guardar otros dos bytes :-)Retina , 100 bytes
Pruébalo en línea! Link solo incluye casos de prueba más pequeños, ya que los más grandes tardan demasiado.
fuente
Mathematica, 73 bytes
fuente
==0
puede reemplazar con<1
?PHP, 68 + 1 bytes
salida unaria:
salida decimal, 73 + 1 bytes:
Ejecutar como tubería
-nR
o probarlo en línea .El operador de Elvis requiere PHP 5.3 o posterior. Para PHP más antiguo, reemplace
?:
con?$n%$s:
(+5 bytes).fuente
Ruby, 46 bytes
fuente
Haskell ,
94938988 bytesEsto se siente muy largo ...
Pruébalo en línea!
¡Gracias @Laikoni y @nimi por jugar 1 byte cada uno!
fuente
C (gcc) ,
83817673 bytesPruébalo en línea!
fuente
Jalea , 12 bytes
Pruébalo en línea!
fuente
Pyth,
2014 bytesPruébalo aquí
fuente
Perl,
71bytes,64bytes, 63 bytesPruébalo en línea
EDITAR: guardado 7 bytes, gracias al comentario de Xcali
EDITAR: desde 5.14 sustitución no destructiva s /// r
fuente
-pl
supone que la parte superior es una bandera de línea de comandos?-pl
bandera de acuerdo con esta publicación .$c
No necesita ser inicializado. Comenzará en elundef
que es 0. El punto y coma después del cierre puede irse. Además, no necesitas-l
. No es necesario tomar múltiples entradas en una ejecución.Dyalog APL, 36 bytes
Pruébalo en línea!
¿Cómo?
fuente
Gaia , 13 bytes
Pruébalo en línea!
Explicación
fuente
Matlab, 150 bytes
Las entradas deben darse a la función como una cadena, como X ('152').
La función funciona mientras se repite e incrementa d. La
x=y;
línea era necesaria para evitar un error de Matlab al intentar leer y sobrescribir un valor variable al mismo tiempo, aparentemente, que era nuevo para mí.Sin golf:
fuente
Haskell , 68 bytes
Pruébalo en línea! Basado en la respuesta de w0lf .
fuente
R , 85 bytes
Función anónima que devuelve la salida requerida.
¡Verifique todos los casos de prueba!
fuente