Minigolf de lunes: una serie de preguntas breves de código de golf , publicadas (¡ojalá!) Todos los lunes.
(Lo siento, llego tarde otra vez; básicamente estuve lejos de mi computadora ayer y hoy).
Nosotros, los programadores (especialmente los golfistas de código), amamos las secuencias enteras arbitrarias. Incluso tenemos un sitio completo dedicado a estas secuencias que actualmente tiene alrededor de 200,000 entradas. En este desafío, implementaremos otro conjunto de estas secuencias.
Reto
Su desafío es escribir un programa o función que tome un entero N y genere una secuencia de enteros de base 10, donde cada entero siguiente se determina de esta manera:
- Comience en 1.
Para cada dígito D en la representación de base 10 del entero anterior:
- Si D es 0, agregue uno al entero actual.
- De lo contrario, se multiplica el número entero actual por D .
Detalles
- Puede suponer que 0 < N <2 31 .
- Debe generar cada número entero en la secuencia, comenzando con el número de entrada, hasta alcanzar un número menor que 10.
- El resultado puede ser una matriz o una cadena separada por espacios, comas, líneas nuevas o una combinación de estos.
- Se permite un espacio final y / o una nueva línea, pero no una coma final.
- Nunca debe haber ceros a la izquierda.
Ejemplos
Ejemplo 1: 77
Este ejemplo es bastante sencillo:
77 = 1*7*7 = 49
49 = 1*4*9 = 36
36 = 1*3*6 = 18
18 = 1*1*8 = 8
Por lo tanto, la salida adecuada es 77 49 36 18 8
.
Ejemplo 2 90
Aquí tenemos:
90 = 1*9+1 = 10
10 = 1*1+1 = 2
Entonces la salida sería 90 10 2
.
Ejemplo 3: 806
Lea las ecuaciones de izquierda a derecha:
806 = 1*8+1*6 = 54 (((1*8)+1)*6)
54 = 1*5*4 = 20
20 = 1*2+1 = 3
La salida debería ser 806 54 20 3
.
Casos de prueba
El primer número en cada línea es la entrada, y la línea completa es la salida esperada.
77 49 36 18 8
90 10 2
249 72 14 4
806 54 20 3
1337 63 18 8
9999 6561 180 9
10000 5
8675309 45369 3240 25 10 2
9999999 4782969 217728 1568 240 9
1234567890 362881 2304 28 16 6
Como referencia, aquí están los siguientes enteros del 10 al 100:
Current | Next
--------+-----
10 | 2
11 | 1
12 | 2
13 | 3
14 | 4
15 | 5
16 | 6
17 | 7
18 | 8
19 | 9
20 | 3
21 | 2
22 | 4
23 | 6
24 | 8
25 | 10
26 | 12
27 | 14
28 | 16
29 | 18
30 | 4
31 | 3
32 | 6
33 | 9
34 | 12
35 | 15
36 | 18
37 | 21
38 | 24
39 | 27
40 | 5
41 | 4
42 | 8
43 | 12
44 | 16
45 | 20
46 | 24
47 | 28
48 | 32
49 | 36
50 | 6
51 | 5
52 | 10
53 | 15
54 | 20
55 | 25
56 | 30
57 | 35
58 | 40
59 | 45
60 | 7
61 | 6
62 | 12
63 | 18
64 | 24
65 | 30
66 | 36
67 | 42
68 | 48
69 | 54
70 | 8
71 | 7
72 | 14
73 | 21
74 | 28
75 | 35
76 | 42
77 | 49
78 | 56
79 | 63
80 | 9
81 | 8
82 | 16
83 | 24
84 | 32
85 | 40
86 | 48
87 | 56
88 | 64
89 | 72
90 | 10
91 | 9
92 | 18
93 | 27
94 | 36
95 | 45
96 | 54
97 | 63
98 | 72
99 | 81
100 | 3
Puede encontrar esta lista ampliada a 10000 aquí .
Tanteo
Este es el código de golf , por lo que gana el código válido más corto en bytes. Tiebreaker va a la presentación que alcanzó su conteo final de bytes primero. El ganador será elegido el próximo lunes 19 de octubre. ¡Buena suerte!
Editar: ¡ Felicidades a tu ganador, @isaacg , usando Pyth una vez más por 14 bytes !
|*GHhG
guarda un byte encima?H*GHhG
.PowerShell,
9291908887 bytesfuente
(...)
para aprovechar la salida automática ... Voy a necesitar recordar eso en el futuro.Pip ,
282523 bytesToma un número como argumento de línea de comando y genera la secuencia en líneas sucesivas.
Explicación:
Ahora me alegro de haber cambiado
P
de una declaración a un operador hace varias revisiones.Pa
es una expresión que evalúaa
el valor de 'pero también lo genera, por lo que puedo imprimira
y probar simultáneamente si es menos de diez usandot>Pa
.fuente
CJam,
26252422 byteso
Pruébalo en línea.
Cómo funciona
Ambos programas esencialmente hacen lo mismo; el primero es un enfoque recursivo, el segundo es iterativo. Explicaré el primero, que considero más interesante.
fuente
Minkolang 0.7 ,
5246 bytes¡Bucles anidados de Woohoo!
Explicación
fuente
Mathematica, 66 bytes
fuente
Python 3, 74,
76bytesYa había una respuesta de Python aquí con reduce, así que quería hacer una sin ella. Debe llamarse con un int.
fuente
Python,
8580 bytesEsto ahora imprime correctamente toda la lista, en lugar de solo el primer valor.
fuente
g=
.K5 , 24 bytes
Recopilar una lista de elementos mientras se itera a un punto fijo es precisamente lo que hace el operador de escaneo
\
. En cada iteración primero lanzo el número a una cadena y luego evalúo cada carácter (.:'$:
), explotando el número en sus dígitos. Luego realizo una reducción (/
) comenzando con 1 y usando la lambda{(x*y;x+1)@~y}
. En este casox
es el valor reductor yy
es cada término sucesivo de la secuencia.En acción:
fuente
Julia,
938988868377 bytesEsto crea una función recursiva
f
que imprime los elementos de secuencia en líneas separadas.Sin golf:
Pruébalo en línea
¡Guardado 6 bytes gracias a Dennis!
fuente
n>9
para cumplir con el segundo ejemplo. Además,f(n)=(println(n);if(d=n>9)for i=reverse(digits(n)) i<1?d+=1:d*=i end;f(d)end)
es un poco más corto.Rubí
83, 72 bytesOriginal declarado como una función:
Traté de usar
Enumerator.new
pero usa tantos bytes :-(Mejorado usando recursividad:
fuente
C # y LINQ,
165146 bytesj (para jarvis) es la función recursiva. r es la lista de int del resultado.
probado en LINQPAD:
fuente
int n = 1
puede serint n=1
, etc.Haskell, 71 bytes
Uso:
g 8675309
->[8675309,45369,3240,25,10,2]
.fuente
Matlab, 108
fuente
Java 8, 148 bytes
formateado
fuente
Jalea , 9 bytes
Pruébalo en línea!
fuente