Mi trabajo es apilar piedras en pilas triangulares. Solo he estado haciendo esto durante un siglo y ya es bastante aburrido. La peor parte es que etiqueto cada pila. Sé cómo descomponer los guijarros en pilas de tamaño máximo , pero quiero minimizar el número de pilas. ¿Puede usted ayudar?
Tarea
Dado un número entero, descomponerlo en el número mínimo de números triangulares y generar ese número mínimo.
Números triangulares
Un número triangular es un número que puede expresarse como la suma de los primeros n
números naturales, por algún valor n
. Así, los primeros pocos números triangulares son
1 3 6 10 15 21 28 36 45 55 66 78 91 105
Ejemplo
Como ejemplo, digamos que la entrada es 9
. No es un número triangular, por lo que no puede expresarse como la suma del 1
número triangular. Por lo tanto, el número mínimo de números triangulares es 2
, que se puede obtener con [6,3]
, dando la salida correcta de 2
.
Como otro ejemplo, digamos que la entrada es 12
. La solución más obvia es usar un algoritmo codicioso y eliminar el número triangular más grande a la vez, dando [10,1,1]
como resultado una salida de 3
. Sin embargo, hay una mejor solución: obtener [6,6]
el resultado correcto de 2
.
Casos de prueba
in out
1 1
2 2
3 1
4 2
5 3
6 1
7 2
8 3
9 2
10 1
11 2
12 2
13 2
14 3
15 1
16 2
17 3
18 2
19 3
20 2
100 2
101 2
5050 1
Reglas
- El entero de entrada está entre 1 y el entero máximo de su idioma.
- Puedo emular cualquier idioma con mis guijarros , y quiero que su código sea lo más pequeño posible porque no tengo nada más que guijarros para rastrearlo. Por lo tanto, este es el código de golf , por lo que gana el código más corto en cada idioma .
fuente
n = 12
).Respuestas:
Retina ,
5749 bytesPruébalo en línea! Basado en mi respuesta a Tres números triangulares . Cambie la tercera línea a
^(^1|1\1)*$
para admitir entrada cero. Editar: Guardado 8 (pero probablemente debería ser más) bytes gracias a @MartinEnder.fuente
1
en la segunda etapa, ni grupo1
ni3
en la tercera etapa.((?(2)1\2|1))
se puede acortar a(1(?(2)\2))
.^((?<2>)(1\2)+){2}$
. O^(()(?<2>1\2)+){2}$
si lo prefieres.Mathematica, 53 bytes
Este código es muy lento. Si desea probar esta función, use la siguiente versión:
Pruébalo en Wolfram Sandbox
Explicación
fuente
Gelatina ( tenedor ), 9 bytes
Esto se basa en una bifurcación donde implementé un átomo de resolución de Frobenius ineficiente. No puedo creer que ya haya pasado un año desde la última vez que lo toqué.
Explicación
fuente
R ,
6958 bytesPruébalo en línea!
Explicación:
fuente
Jalea , 15 bytes
Pruébalo en línea!
fuente
JavaScript (ES6),
756361 bytes¿Cómo?
Usamos las siguientes propiedades:
Dado un número entero positivo n , es suficiente para probar si podemos encontrar:
Si ambas pruebas fallan, n debe ser la suma de 3 números triangulares.
Casos de prueba
Mostrar fragmento de código
fuente
MATL , 15 bytes
Pruébalo en línea!
Explicación
fuente
Kotlin ,
176154 bytesSumisión
Embellecido
Prueba
TryItOnline
fuente