Dado um número inteiro, produza cinco cubos perfeitos cuja soma é esse número inteiro. Observe que os cubos podem ser positivos, negativos ou zero. Por exemplo,
-10 == -64 - 64 + 64 + 27 + 27
portanto, para entrada, -10
você pode produzir [-64, -64, 64, 27, 27]
, embora outras soluções sejam possíveis. Observe que você deve gerar os cubos, não os números que estão sendo cubados.
Uma solução Sempre existe - você pode descobrir isso por si mesmo. É ainda conjeturado que quatro cubos são suficientes.
-10
outra solução possível poderia ser,-1000+4574296+4410944-4492125-4492125
por exemplo. E é permitido produzir--
ou em+-
vez de+
/-
respectivamente (ou seja, em3 = 27+-27+-125--64--64
vez de3 = 27-27-135+64+64
)?--5
, eu diria que não, conforme as regras usuais de saída de uma expressão .+
sinais, apenas os números.-10 = -64 - 64 + 64 + 27 + 27
ou-10 = -343 + 0 -8 +125 +216
Respostas:
Braquilog , 18 bytes
Experimente online!
Explicação
Basicamente, descrevemos o problema, com a restrição adicional de que queremos que a lista de saída não aumente em termos de magnitudes: isso força o Brachylog a retroceder adequadamente em todas as combinações possíveis de 5 valores, em vez de retroceder infinitamente no valor do último elemento da lista.
Encontrando soluções diferentes
Ao anexar a
≜
, é possível usar esse predicado para encontrar todas as soluções com magnitudes crescentes: por exemplo, aqui estão as 10 primeiras soluções para42
fonte
Brachylog , 11 bytes
Obrigado Fatalize por economizar um byte
Experimente online!
Em primeiro lugar,
~+
reforça que a saída (.
) deve somar a entrada.l₅
restringe novamente a saída, ditando que ela deve ter um comprimento de 5.≥₁
declara que a lista deve estar em ordem decrescente (acredito que isso seja necessário para impedir que o programa entre em um loop infinito)Unificamos explicitamente essa lista com
.
a variável de saída, porque nosso próximo predicado "alterará" os valores dentro da lista. Em seguida, pegamos a raiz do cubo de cada valor na lista com√₃ᵐ
. Como o Brachylog é inerentemente baseado em números inteiros, isso determina que todos os números na lista são números de cubos.Finalmente, usamos
∧
porque há um implícito.
adicionado ao final de cada linha. Como não queremos.
ser unificados com a lista de raízes de cubos, unificamos-a mais cedo e usamos∧
para interromper a unificação no final.fonte
Python 2 ,
585754 bytesExperimente online!
fonte
k=-(n-n**3)/6;[v**3for v in~k,1-k,n,k,k]
-(n-n**3)
você não pode usar(n**3-n)
?Python 3 , 65 bytes
Experimente online!
Quero dizer, uma fórmula explícita está aqui (embora ele abstraia a construção por trás de um existencial)
fonte
k
e reescrevendo sua equação. Experimente online!Java 8,
17887737165 bytes-6 bytes graças a @ OlivierGrégoire .
A mesma explicação na parte inferior, mas usando a equação base em vez da derivada que eu usei antes (graças à resposta Python 3 de @LeakyNun para a dica implícita):
k = (n - n 3 ) / 6
n == n 3 + (k + 1) 3 + (k-1) 3 - k 3 - k 3
Experimente online.
Resposta antiga de 178 bytes:
Experimente online.
Explicação:
Faço um loop
k
de 0 para cima até encontrar uma solução. Em cada iteração, ele verificará essas duas equações: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 3Por quê?
Como n - n 3 = n * (1-n) * (1 + n) e, em seguida, 6 | (nn 3 ) , ele pode ser escrito como n - n 3 = 6k .
6k = (k + 1) 3 + (k-1) 3 - k 3 - k 3 .
E, portanto, n = n 3 + (k + 1) 3 + (k-1) 3 - k 3 - k 3 para alguns k .
Fonte.
fonte
n->new long[]{n*n*n,(n=(n-n*n*n)/6+1)*n*n--,--n*n*n,n=-++n*n*n,n}
(ou 64 usando ints para resultados menos precisos)Gelatina , 13 bytes
Experimente online!
Descobrir a fórmula de forma independente. (x + 1) 3 + (x-1) 3 - 2 × x 3 == 6 × x.
Alternativa 13 bytes: Experimente online!
fonte
‘c3µ³;;;C;~*3
deve salvar um byte uma vez que (n ^ 3-n) / 6 = C (n + 1, 3)Oitava ,
474033 bytesExperimente online!
Salvei 6 bytes graças a Giuseppe, pois esqueci de remover alguns parênteses antigos. Salvou outros bytes alterando os sinais, graças a rafa11111.
Usa a fórmula na postagem math.se vinculada :
Parece ser mais longo se eu tentar resolver a equação: (nn ^ 3) = (k + 1) ^ 3 + (k-1) ^ 3 - k ^ 3 - k ^ 3 com relação a k , em vez de apenas usando a equação.
fonte
Funções do Minecraft (18w11a, snapshots de 1,13), 813 bytes
Utiliza seis funções:
uma
b
c
d
e
f
"Recebe entrada" de um objetivo do placar chamado
n
, crie-o com/scoreboard objectives add n dummy
e, em seguida, defina-o usando/scoreboard players set x n 5
. Em seguida, chame a função usando/function a
Usa a fórmula desta resposta math.se
fonte
JavaScript (Node.js) ,
4845 bytesExperimente online!
fonte
|0
?n**3-n
deve ser um múltiplo de 6 para inteiron
.MATL , 21 bytes
Isso tenta todas as cinco tuplas de números do conjunto
(-abs(n))^3, (-abs(n)+1)^3, ..., abs(n)^3
. Portanto, é muito ineficiente.Experimente online!
fonte
Haskell ,
4342 bytesApenas a resposta popular, traduzida para Haskell. Obrigado a @ rafa11111 por salvar um byte!
Experimente online!
fonte
k
atribuição ...Casca , 12 bytes
Experimente online!
Tenta todas as listas possíveis de 5 cubos e retorna o primeiro com a soma correta.
Explicação
fonte
C (gcc) ,
858175 bytesEconomizou 4 bytes e 6 bytes graças à reordenação de atribuições do @catcat
Experimente online!
fonte
Fortran (GFortran) , 53 bytes
Experimente online!
Fortran superando Python? Oque esta acontecendo aqui?
fonte
Python 3,
656160 bytesEditar: eliminou alguns espaços desnecessários.
Edit: graças à reordenação inteligente de rafa11111.
Inspirado por isso .
Experimente online!
fonte
(N**3-N)
e[N,1-k,-1-k,k,k]
R ,
4038 bytesFaz uso da fórmula na publicação math.SE vinculada. Até 2 bytes graças a Giuseppe.
Experimente online!
fonte
APL (Dyalog Unicode) ,
3026 bytesExperimente online!
Tradução da resposta de LeakyNun em APL .
Graças a Adám por 4 bytes, ficando tácito.
Quão?
fonte
Casca , 20 bytes
Experimente online!
Usa a fórmula desta postagem .
Explicação
fonte
x86,
4139 bytesImplementação principalmente direta da fórmula com entrada
ecx
e saída na pilha.O interessante é que usei uma função de cubo, mas como
call label
são 5 bytes , armazeno o endereço do rótulo e uso 2 bytescall reg
. Além disso, como estou pressionando valores em minha função, uso um emjmp
vez deret
. É muito possível que ser inteligente com um loop e a pilha possa evitar pagar completamente.Não fiz truques sofisticados com cubos, como usar
(k+1)^3 = k^3 + 3k^2 + 3k + 1
.Changelog:
Corrija a contagem de bytes usando em
not
vez deneg
/dec
.-2 bytes por não
xor
ing,edx
pois provavelmente é 0 deimul
.Objdump:
Aqui está a minha versão de teste que faz todo o cubo no final. Depois que os valores são pressionados na pilha, o loop do cubo substitui os valores da pilha. Atualmente, são
4240 bytes, mas deve haver algumas melhorias em algum lugar.fonte
Cubicamente , 51 caracteres, 55 bytes
Experimente online!
Aparentemente, o MDXF esqueceu de implementar o SBCS ...
fonte
Retirar 98 , 35 bytes
Experimente online!
Ele usa a fórmula populares de esta resposta math.se .
fonte
Perl 5
-nE
, 48 bytesponta do chapéu
fonte
Núcleo do PowerShell , 52 bytes
Experimente online!
Usa a equação
o=o^3 + (1-k)^3 + (-k-1)^3 + k^3 + k^3
, wherek=o^3 - o
; esta é uma refatoração menor do popularl=o-o^3
(comk=-l
).Como nota lateral, a expressão
l=o-o^3
parece um gato com uma orelha machucada.fonte
Ruby , 43 bytes
Experimente online!
fonte