Dado un entero, genera cinco cubos perfectos cuya suma es ese entero. Tenga en cuenta que los cubos pueden ser positivos, negativos o cero. Por ejemplo,
-10 == -64 - 64 + 64 + 27 + 27
por lo tanto, para la entrada -10
puede salir [-64, -64, 64, 27, 27]
, aunque son posibles otras soluciones. Tenga en cuenta que debe generar los cubos, no los números que se están cubicando.
Siempre existe una solución : es posible que disfrute de resolver esto por sí mismo. Se conjetura además que cuatro cubos son suficientes.
-10
otra posible solución podría ser,-1000+4574296+4410944-4492125-4492125
por ejemplo. ¿Y se permite la salida--
o en+-
lugar de+
/-
respectivamente (es decir, en3 = 27+-27+-125--64--64
lugar de3 = 27-27-135+64+64
)?--5
, diría que no, según las reglas habituales sobre la salida de una expresión .+
signos, solo los números.-10 = -64 - 64 + 64 + 27 + 27
o-10 = -343 + 0 -8 +125 +216
Respuestas:
Brachylog , 18 bytes
Pruébalo en línea!
Explicación
Básicamente describimos el problema, con la restricción adicional de que queremos que la lista de salida no aumente en términos de magnitudes: esto obliga a Brachylog a retroceder adecuadamente sobre todas las combinaciones posibles de 5 valores, en lugar de retroceder infinitamente sobre el valor del último elemento de la lista.
Encontrar diferentes soluciones
Al agregar a
≜
, es posible usar este predicado para encontrar todas las soluciones con magnitudes crecientes: por ejemplo, aquí están las 10 primeras soluciones para42
fuente
Brachylog , 11 bytes
Gracias Fatalize por guardar un byte
Pruébalo en línea!
En primer lugar,
~+
exige que la salida (.
) debe sumar a la entrada.l₅
nuevamente restringe la salida, dictando que debe tener una longitud de 5.≥₁
declara que la lista debe estar en orden decreciente (creo que esto es necesario para evitar que el programa entre en un bucle infinito)Unificamos explícitamente esta lista con
.
la variable de salida, porque nuestro próximo predicado "cambiará" los valores dentro de la lista. Luego tomamos la raíz cúbica de cada valor en la lista con√₃ᵐ
. Dado que Brachylog está intrínsecamente basado en enteros, esto dicta que todos los números en la lista son números de cubo.Finalmente, usamos
∧
porque hay un implícito.
agregado al final de cada línea. Como no queremos.
unificarnos con la lista de raíces cúbicas, la unificamos antes y la usamos∧
para evitar que se unifique al final.fuente
Python 2 ,
585754 bytesPruébalo en línea!
fuente
k=-(n-n**3)/6;[v**3for v in~k,1-k,n,k,k]
-(n-n**3)
no puedes usar(n**3-n)
?Python 3 , 65 bytes
Pruébalo en línea!
Quiero decir, una fórmula explícita está incluso aquí (aunque resumió la construcción detrás de un existencial)
fuente
k
y reescribiendo su ecuación. Pruébalo en línea!Java 8,
17887737165 bytes-6 bytes gracias a @ OlivierGrégoire .
La misma explicación en la parte inferior, pero usando la ecuación base en lugar de la derivada que usé antes (gracias a la respuesta de Python 3 de @LeakyNun por la sugerencia implícita):
k = (n - n 3 ) / 6
n == n 3 + (k + 1) 3 + (k-1) 3 - k 3 - k 3
Pruébalo en línea.
Antigua respuesta de 178 bytes:
Pruébalo en línea.
Explicación:
Doy un bucle
k
desde 0 hacia arriba hasta que se encuentra una solución. En cada iteración verificará estas dos ecuaciones:k
: n == n 3 + (k + 1) 3 + (k-1) 3 - k 3 - k 3k
: n == n 3 - (k + 1) 3 - (k-1) 3 + k 3 + k 3¿Por qué?
Como n - n 3 = n * (1-n) * (1 + n) y luego 6 | (nn 3 ) , se puede escribir como n - n 3 = 6k .
6k = (k + 1) 3 + (k-1) 3 - k 3 - k 3 .
Y por lo tanto n = n 3 + (k + 1) 3 + (k-1) 3 - k 3 - k 3 para algunos k .
Fuente.
fuente
n->new long[]{n*n*n,(n=(n-n*n*n)/6+1)*n*n--,--n*n*n,n=-++n*n*n,n}
(o 64 usando entradas para resultados menos precisos)Jalea , 13 bytes
Pruébalo en línea!
Descubre la fórmula de forma independiente. (x + 1) 3 + (x-1) 3 - 2 × x 3 == 6 × x.
Alternativa de 13 bytes: ¡ Pruébelo en línea!
fuente
‘c3µ³;;;C;~*3
debería guardar un byte desde (n ^ 3-n) / 6 = C (n + 1, 3)Octava ,
474033 bytesPruébalo en línea!
Ahorré 6 bytes gracias a Giuseppe, ya que había olvidado eliminar algunos paréntesis antiguos. Ahorró otros bytes cambiando los signos, gracias a rafa11111.
Utiliza la fórmula en la publicación math.se vinculada :
Parece ser más largo si trato de resolver la ecuación: (nn ^ 3) = (k + 1) ^ 3 + (k-1) ^ 3 - k ^ 3 - k ^ 3 con respecto a k , en lugar de solo usando la ecuación.
fuente
Funciones de Minecraft (18w11a, 1.13 instantáneas), 813 bytes
Utiliza seis funciones:
una
si
do
re
mi
F
"Toma datos" de un objetivo del marcador nombrado
n
, créalo con/scoreboard objectives add n dummy
y luego configúrelo usando/scoreboard players set x n 5
. Luego llame a la función usando/function a
Utiliza la fórmula de esta respuesta matemática.
fuente
JavaScript (Node.js) ,
4845 bytesPruébalo en línea!
fuente
|0
?n**3-n
debe ser un múltiplo de 6 para enteron
.MATL , 21 bytes
Esto intenta todas las 5 tuplas de números del conjunto
(-abs(n))^3, (-abs(n)+1)^3, ..., abs(n)^3
. Entonces es muy ineficiente.Pruébalo en línea!
fuente
Haskell ,
4342 bytesSolo la respuesta popular, traducida a Haskell. ¡Gracias a @ rafa11111 por guardar un byte!
Pruébalo en línea!
fuente
k
tarea ...Casco , 12 bytes
Pruébalo en línea!
Intenta todas las listas posibles de 5 cubos y devuelve el primero con la suma correcta.
Explicación
fuente
C (gcc) ,
858175 bytesSe guardaron 4 bytes y luego 6 bytes gracias al reordenamiento de las asignaciones de @ ceilingcat
Pruébalo en línea!
fuente
Fortran (GFortran) , 53 bytes
Pruébalo en línea!
¿Fortran superando a Python? ¿Que está pasando aqui?
fuente
Python 3,
656160 bytesEditar: dejó caer algunos espacios innecesarios.
Editar: gracias al reordenamiento inteligente de rafa11111.
Inspirado por esto .
Pruébalo en línea!
fuente
(N**3-N)
y[N,1-k,-1-k,k,k]
R ,
4038 bytesHace uso de la fórmula en la publicación matemática vinculada. Hasta 2 bytes gracias a Giuseppe.
Pruébalo en línea!
fuente
APL (Dyalog Unicode) ,
3026 bytesPruébalo en línea!
Traducción APL de la respuesta de LeakyNun .
Gracias a Adám por 4 bytes yendo tácito.
¿Cómo?
fuente
Casco , 20 bytes
Pruébalo en línea!
Utiliza la fórmula de esta publicación .
Explicación
fuente
x86,
4139 bytesImplementación principalmente directa de la fórmula con entrada
ecx
y salida en la pila.Lo interesante es que usé una función de cubing, pero como
call label
son 5 bytes , almaceno la dirección de la etiqueta y uso el byte 2call reg
. Además, como estoy empujando valores en mi función, uso un enjmp
lugar deret
. Es muy posible que ser inteligente con un bucle y la pila evite llamar por completo.No hice ningún truco elegante con cubos, como usar
(k+1)^3 = k^3 + 3k^2 + 3k + 1
.Registro de cambios:
Fix byte recuento usando
not
en lugar deneg
/dec
.-2 bytes por no
xor
ingedx
ya que probablemente sea 0 deimul
.Objdump:
Aquí está mi versión de prueba que hace todos los cubos al final. Después de que los valores se introducen en la pila, el bucle de cubo sobrescribe los valores de la pila. Actualmente es de
4240 bytes, pero debería haber algunas mejoras en alguna parte.fuente
Cúbicamente , 51 caracteres, 55 bytes
Pruébalo en línea!
Aparentemente, MDXF olvidó implementar el SBCS ...
fuente
Unefunge 98 , 35 bytes
Pruébalo en línea!
Utiliza la fórmula populares desde esta respuesta math.se .
fuente
Perl 5
-nE
, 48 bytespunta de sombrero
fuente
PowerShell Core , 52 bytes
Pruébalo en línea!
Utiliza la ecuación
o=o^3 + (1-k)^3 + (-k-1)^3 + k^3 + k^3
, dondek=o^3 - o
; esta es una refactorización menor de lo popularl=o-o^3
(conk=-l
).Como nota al margen, la expresión
l=o-o^3
parece un gato con una oreja lastimada.fuente
Ruby , 43 bytes
Pruébalo en línea!
fuente