Implemente esta relación de recurrencia como una función o programa que ingresa y emite un entero no negativo:
F (0) = 0
F (N) = el entero más pequeño mayor que F (N-1) de modo que la suma y / o el producto de sus dígitos de base 10 es N
N es la entrada de su programa y F (N) su salida.
Para ser claros, la suma de los dígitos en un número como 913 es 9 + 1 + 3 = 13. El producto es 9 × 1 × 3 = 27. Para números de un solo dígito, la suma y el producto son el mismo número. Los números que contienen un 0, por supuesto, tienen el producto 0.
Los resultados a través de F (70) son:
N F(N)
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 19
11 29
12 34
13 49
14 59
15 69
16 79
17 89
18 92
19 199
20 225
21 317
22 499
23 599
24 614
25 799
26 899
27 913
28 1147
29 2999
30 3125
31 4999
32 5999
33 6999
34 7999
35 8999
36 9114
37 19999
38 29999
39 39999
40 41125
41 59999
42 61117
43 79999
44 89999
45 91115
46 199999
47 299999
48 311128
49 499999
50 511125
51 699999
52 799999
53 899999
54 911116
55 1999999
56 2111147
57 3999999
58 4999999
59 5999999
60 6111125
61 7999999
62 8999999
63 9111117
64 11111188
65 29999999
66 39999999
67 49999999
68 59999999
69 69999999
70 71111125
El código más corto en bytes gana. Felicitaciones si puede demostrar que su código aprovecha cierta eficiencia.
Respuestas:
05AB1E ,
2012 bytes¡Guardado 8 bytes gracias a Osable !
Utiliza la codificación CP-1252 . Pruébalo en línea!
fuente
µNSDOsP‚¾>å½
. Parece funcionar para números elegidos al azar.Mathematica, 71 bytes, 68 caracteres
Por solo 4 bytes más, aquí hay una versión que almacena los valores de
±n
:Con la última versión, antes de evaluar
±n
,PlusMinus
tendrá dos valores bajos:Ahora si evaluamos
±20
:Esto acelera drásticamente los cálculos futuros, ya que Mathematica ya no calculará los valores entre
0
y20
recursivamente. El tiempo ahorrado es más dramático a medida quen
aumenta:fuente
C #,
155159135 bytesSúper ineficiente, lleva mucho tiempo soloN>=14
. Voy a tratar de obtener una solución más eficiente pero más larga.Bien, mucho mejor ahora, pero 4 bytes más. Oh, bueno, ahora puedo hacerlo
N<=50
bastante rápido. ¡Gracias @milk por guardar 24 bytes!fuente
for(;;)
y el foreach conforeach(var c in++i+"")
. -22 bytes para reemplazarint.Parse(c+"")
conc-48
.Pyth -
1817 bytes¡Un byte guardado gracias a @Jakube!
Los usos se reducen para hacer lo recursivo.
Test Suite .
fuente
sM*FBjT;
también genera la suma de dígitos y el producto y es 1 byte más corto.R,
124112 bytesFalla en N = 45 porque R insiste en escribir 10.000 como 1e + 05, lo cual no es apreciado por
as.numeric()
esto, esto se puede solucionar usandoas.integer()
al costo de 12 bytes:Como lenguaje de programación estadística, R tiene formas molestas de dividir números en un vector de dígitos. Especialmente porque todo tiene que volver a convertirse de cadenas en valores numéricos explícitamente.
12 bytes guardados gracias a billywob.
fuente
as.double(el(strsplit(c(x,""),"")))
para dividir un número entero en un vector de sus dígitos. Sin embargo, todavía se encuentra con el problema de formato, pero eso puede resolverse como en su respuestaas.integer()
sprintf()
en su lugar para formatear el entero en una cadena sin ceros finales directamente:as.double(el(strsplit(sprintf("%1.f",x),"")))
y omitir el uso deas.integer()
x=x+1
y está garantizado que se evaluará una vez, porque al principioy=F(N-1)
definitivamente no es igual aN
.JavaScript (ES6)
1091071059189 Bytesfuente
JavaScript (ES6), 84
86Editar: 2 bytes guardados gracias @Arnauld
Nota de prueba superior a 50, usará demasiada CPU, haga clic en 'Ocultar resultados' para detener antes de que sea demasiado tarde
fuente
for(v=n&&f(n-1),p=s=n+1;s&&p-1;)[...++v+''].map(d=>(p/=d,s-=d),p=s=n);v
debería guardar 2 bytes. Sospecho que se puede acortar un poco más, pero no pude resolverlo hasta ahora.p /= d
produzca un resultado exacto cuando end
realidad es un divisor dep
. A menos que me equivoque, esto es cierto para cualquierad <= p <= Number.MAX_SAFE_INTEGER
. Obtendremos errores de redondeo de coma flotante cuandop % d != 0
, pero eso debería ser seguro.eval`1+1`
) ( he aquí por qué codegolf.stackexchange.com/a/52204/21348 : lea el primer comentario)Mathematica, 67 bytes
Función, nombrada
a
. Toma un número como entrada y devuelve un número como salida. Inspirado en la solución anterior de Mathematica, pero utiliza un mecanismo de bucle diferente.fuente
C, 240 bytes
Tratando de explotar algunas propiedades matemáticas de la secuencia.
fuente
PowerShell v3 +, 114 bytes
Solución iterativa, sin una forma fácil de convertir un número en la suma / producto de sus dígitos, por lo que es bastante más largo que el JavaScript responde.
Toma la entrada
$n
, los conjuntos$i
a un array con sólo0
(esto es la colección deF()
, y se pone$l
igual a1
(esta es la últimaF
). A continuación, bucle hacia arriba desde1
a$n
, cada iteración la ejecución de unfor
bucle.El
for
condicional del bucle toma el$l
número de prueba, en una cadena"$l"
, luego lochar
convierte como una matriz y almacena esa matriz en la variable temporal$b
. Luego-join
juntamos esos dígitos+
y los canalizamos aiex
(abreviaturaInvoke-Expression
y similar aeval
). Además, también hacemos lo mismo con*
. Esos dos números se encapsulan en pares y se tratan como el argumento de matriz para el-notin
operador contra el número actual$_
del bucle externo (es decir, elfor
bucle se ejecuta tanto como sea+
y*
son diferentes a$_
). El cuerpo delfor
bucle solo se incrementa$l++
.Una vez que estamos fuera de ese
for
ciclo interno , agregamos nuestro$l
encendido como un nuevo elemento de$i
. Una vez que hemos completado completamente el bucle de rango, simplemente lo colocamos$i[$n]
en la tubería y la salida es implícita.NB: es bastante lento para ejecutar arriba
20
, simplemente debido a la estructura del bucle. Por ejemplo,N=40
toma alrededor de dos minutos en mi máquina, y ni siquiera me he molestado en probarN>50
.fuente
Pyke, 17 bytes
Pruébalo aquí!
O 13 bytes no competitivos
first_n
ahora pone la cantidad de elementos ya encontrados más unoi
si se usaPruébalo aquí!
fuente
Python 2 , 77 bytes
Pruébalo en línea!
fuente
Maravilla , 49 bytes
¡Patrón a juego ftw! Uso:
Más legible:
Esto es básicamente una implementación palabra por palabra de las especificaciones.
fuente
BASH, 107 bytes
con pliegue + pegar + bc
fuente
Befunge, 101 bytes
Pruébalo en línea! Pero tenga en cuenta que se volverá muy lento una vez que llegue a los cuarenta años. Si desea probar el rango completo, realmente necesita usar un compilador Befunge.
Explicación
fuente
PHP , 110 bytes
Pruébalo en línea!
fuente