Persistencia Multiplicativa
- Multiplica todos los dígitos en un número
- Repita hasta que le quede un solo dígito
Como lo explica Numberphile :
- Numberphile "¿Qué tiene de especial 277777788888899?"
- Numberphile "Persistencia Multiplicativa (metraje extra)"
Ejemplo
- 277777788888899 → 2x7x7x7x7x7x7x8x8x8x8x8x8x9x9 = 4996238671872
- 4996238671872 → 4x9x9x6x2x3x8x6x7x1x8x7x2 = 438939648
- 438939648 → 4x3x8x9x3x9x6x4x8 = 4478976
- 4478976 → 4x4x7x8x9x7x6 = 338688
- 338688 → 3x3x8x6x8x8 = 27648
- 27648 → 2x7x6x4x8 = 2688
- 2688 → 2x6x8x8 = 768
- 768 → 7x6x8 = 336
- 336 → 3x3x6 = 54
- 54 → 5x4 = 20
- 20 → 2x0 = 0
Este es el registro actual, por cierto: el número más pequeño con el mayor número de pasos.
Golf
Un programa que toma cualquier número entero como entrada y luego emite el resultado de cada paso, comenzando con la entrada en sí, hasta que lleguemos a un solo dígito. Para 277777788888899, la salida debe ser
277777788888899
4996238671872
438939648
4478976
338688
27648
2688
768
336
54
20
0
(Contar el número de pasos se deja como ejercicio para el usuario).
Más ejemplos
De A003001 :
25
10
0
De A003001 también:
68889
27648
2688
768
336
54
20
0
Del video de Numberphile :
327
42
8
Entonces ha habido una pregunta sobre la Persistencia Aditiva , pero esta es la Persistencia Multiplicativa. Además, esa pregunta pide la cantidad de pasos como salida, mientras que estoy interesado en ver los resultados intermedios.
Respuestas:
Jalea , 4 bytes
Pruébalo en línea!
Explicación
Como beneficio adicional, aquí hay un TIO que encontrará los números con el mayor número de pasos para un rango dado de números de dígitos. Se escala bien incluso en TIO.
fuente
TI-BASIC (TI-84),
303231 bytes-1 byte gracias a @SolomonUcko!
La entrada está adentro
Ans
.La salida se muestra como las solicitudes de desafío. El final
Ans
es necesario para imprimir el último paso.Debo admitir que no pensé en esta fórmula, sino que la encontré aquí y la modifiqué para que se ajustara mejor al desafío.
EDITAR: Al volver a leer el desafío, me di cuenta de que el programa debe terminar si el producto tiene un dígito. Por lo tanto, se agregaron 2 bytes para dar cuenta de esto.
Ejemplo:
Explicación:
Modelo visual:
Ans
comienza como125673
.Este modelo solo cubre la lógica detrás de multiplicar los dígitos; todo lo demás es más fácil de entender.
Notas:
TI-BASIC es un lenguaje tokenizado. El recuento de caracteres no es igual al recuento de bytes.
10^(
es este token de un byte .Este programa no proporcionará la secuencia correcta de productos con enteros mayores de 14 dígitos debido a las limitaciones de precisión decimal en las calculadoras TI.
fuente
10^(
afueraseq(
y omitiendo el paréntesis de cierre?K (ngn / k) , 9 bytes
Pruébalo en línea!
{
}\
sigue aplicando la función entre llaves hasta que la secuencia converja$x
formatear el argumento como una cadena (lista de caracteres).'
evaluar cada uno (otros dialectos de k requieren dos puntos.:'
)*/
veces, es decir, productofuente
dzaima / APL ,
1411 bytesPruébalo en línea!
fuente
R , 59 bytes
Pruébalo en línea!
Como
print
invisibly
devuelve su entrada, podemos usarprint(n)
dentro delwhile
bucle para simular undo-while
bucle. Esto es inspirada por uno de mis consejos para jugar al golf en I .El encabezado ayuda a evitar que se impriman grandes números en notación científica.
fuente
05AB1E ,
74 bytesPruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
Wolfram Language (Mathematica) , 47 bytes
Pruébalo en línea!
fuente
Wolfram Language (Mathematica) , 45 bytes
Pruébalo en línea!
fuente
Echo
.Perl 6 , 23 bytes
Pruébalo en línea!
fuente
Python 2 ,
4643 bytes-3 gracias a xnor (comparación encadenada)
Pruébalo en línea!
fuente
>
en lugar deand
.PowerShell , 54 bytes
Pruébalo en línea!
Método iterativo que primero escribe el argumento de entrada, luego lo convierte en una cadena y lo canaliza en una matriz de caracteres. Esta matriz está unida por un solo asterisco y se ejecuta como un comando con el alias de expresión de invocación. Como esto escribe el número inicial hasta el último número mayor que 0, (20, en el escenario de prueba dado), agrego un final
$a
al final para la salida.fuente
C # (compilador interactivo de Visual C #) ,
797468 bytesIntento mantenerme alejado de la recursividad en C # debido a la duración de la declaración del método, pero en este caso se guarda en comparación con un bucle.
Pruébalo en línea!
fuente
PHP , 63 bytes
Versión iterativa, llamada con
php -nF
entrada deSTDIN
.Pruébalo en línea!
PHP ,
7271 bytesPruébalo en línea!
Versión recursiva, como función.
Entrada: 277777788888899
Entrada: 23
fuente
Python 2 ,
616259 bytesPruébalo en línea!
-3 bytes, gracias a Jonathan Allan
fuente
int.__mul__
es tres bytes menos quelambda a,b:a*b
f(reduce(int.__mul__,map(int,`n`)))
af(eval('*'.join(`n`)))
para guardar 13 bytes.perl 5 (
-n
-M5.01
),323025 bytes25 bytes
30 bytes
32 bytes
fuente
-lpF//
-lpF//
, actualizandoMathGolf ,
910 bytesPruébalo en línea!
Ahora maneja correctamente las entradas que son de un solo dígito. No es perfecto, pero al menos es correcto.
Explicación
fuente
Julia 0.7 ,
3633 bytesPruébalo en línea!
Gracias a H.PWiz por -3 bytes.
fuente
[n;f(prod(digits(n)))]
JavaScript (ES6), 45 bytes
Devuelve una matriz de enteros.
Pruébalo en línea!
fuente
PowerShell , 51 bytes
Pruébalo en línea!
fuente
APL (NARS), 19 caracteres, 38 bytes
prueba:
fuente
Haskell, 45 bytes
Pruébalo en línea!
fuente
J , 16 bytes
Pruébalo en línea!
fuente
Ruby ,
383534 bytesPruébalo en línea!
1 byte guardado por G B.
fuente
Japt
-R
, 9 bytesHorriblemente ineficiente, ¡ni siquiera intentes ejecutar el primer caso de prueba!
Intentalo
fuente
Brachylog , 7 bytes
Pruébalo en línea!
Explicación
fuente
JavaScript (nodo de Babel) , 46 bytes
Pruébalo en línea!
JavaScript (nodo de Babel) , 44 bytes
Si la entrada se puede tomar como String
Pruébalo en línea!
fuente
PowerShell ,
6459 bytesPruébalo en línea!
Método iterativo Toma la entrada y la almacena
$a
, luego ingresa unfor
bucle siempre que la longitud$a
sea dos o más (es decir, es mayor que9
). Dentro del bucle sacamos$a
y luego lo recalculamos convirtiéndolo ent
oCharArray
, uniéndolojoin
con*
, y luegoiex
(abreviaturaInvoke-Expression
y similar aeval
). Una vez que estamos fuera del ciclo, nos queda un solo dígito para imprimir, por lo que colocamos$a
nuevamente en la tubería.-5 bytes gracias a KGlasier.
fuente
9-lt$a
lugar de$a.length-1
guardar 5 bytes. Y si no te fueras todo el tiempo, podrías cortar un trozo decente. ¡Mira mi intento de PowerShell si quieres!Carbón , 13 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Imprime la entrada por primera vez.
Repita mientras la longitud de la entrada no sea 1.
Reemplace la entrada con su producto digital fundido a cadena.
Imprima la entrada en una nueva línea.
fuente
Retina , 24 bytes
Pruébalo en línea! Explicación:
Imprima el valor actual en su propia línea al comienzo de cada ciclo hasta que deje de cambiar y no imprima el valor sin cambios dos veces. Evaluar el valor actual al final de cada ciclo.
Agregue un
*
después de cada dígito.Termine de convertir la entrada en una expresión que evalúe el producto digital.
Solo para el registro, Retina puede hacer esto en una línea (25 bytes):
fuente
C (gcc) , 58 bytes
Pruébalo en línea!
El enfoque iterativo resulta ser 1 byte más corto.
C (gcc) ,
6159 bytes (recursivo)Pruébalo en línea!
La recursión parece ser más corta que la iteración tanto para la impresión como para el paso ...fuente