Avec un entier, sortez cinq cubes parfaits dont la somme est cet entier. Notez que les cubes peuvent être positifs, négatifs ou nuls. Par exemple,
-10 == -64 - 64 + 64 + 27 + 27
-10
vous pouvez donc générer des entrées [-64, -64, 64, 27, 27]
, même si d’autres solutions sont possibles. Notez que vous devez sortir les cubes et non les nombres en cubes.
Il existe toujours une solution : vous pouvez vous amuser à résoudre ce problème . On suppose en outre que quatre cubes suffisent.
-10
une autre solution possible pourrait être-1000+4574296+4410944-4492125-4492125
par exemple. Et est-il autorisé à sortir--
ou à la+-
place de+
/-
respectivement (c'est-3 = 27+-27+-125--64--64
à- dire à la place de3 = 27-27-135+64+64
)?--5
, je dirais non, conformément aux règles habituelles de sortie d'une expression .+
signes, mais uniquement des nombres.-10 = -64 - 64 + 64 + 27 + 27
ou-10 = -343 + 0 -8 +125 +216
Réponses:
Brachylog , 18 octets
Essayez-le en ligne!
Explication
Nous décrivons essentiellement le problème, avec la contrainte supplémentaire que nous voulons que la liste de sortie ne soit pas croissante en termes de magnitudes: ceci force Brachylog à revenir correctement sur toutes les combinaisons possibles de 5 valeurs, au lieu de revenir à l'infini sur la valeur de la dernière. élément de la liste.
Trouver des solutions différentes
En ajoutant a
≜
, il est possible d’utiliser ce prédicat pour trouver toutes les solutions d’importance croissante: voici , par exemple, les 10 premières solutions pour42
la source
Brachylog , 11 octets
Merci Fatalize pour la sauvegarde d'un octet
Essayez-le en ligne!
En premier lieu
~+
, la sortie (.
) doit additionner à l'entrée.l₅
de nouveau contraint la sortie, en dictant qu'elle doit avoir une longueur de 5.≥₁
déclare que la liste doit être dans un ordre décroissant (je crois que cela est nécessaire pour empêcher le programme d'entrer dans une boucle infinie)Nous unifions explicitement cette liste avec
.
la variable de sortie, car notre prédicat suivant "changera" les valeurs de la liste. Nous prenons ensuite la racine cubique de chaque valeur de la liste avec√₃ᵐ
. Comme Brachylog est intrinsèquement basé sur un nombre entier, cela signifie que tous les nombres de la liste sont des nombres de cubes.Enfin, nous utilisons
∧
parce qu’un implicite est.
ajouté à la fin de chaque ligne. Puisque nous ne voulons.
pas être unifiés avec la liste des racines de cubes, nous l'avons unifié plus tôt et utilisons∧
pour l'empêcher d'unifier à la fin.la source
Python 2 ,
585754 octetsEssayez-le en ligne!
la source
k=-(n-n**3)/6;[v**3for v in~k,1-k,n,k,k]
-(n-n**3)
ne pouvez-vous pas utiliser(n**3-n)
?Python 3 , 65 octets
Essayez-le en ligne!
Je veux dire, une formule explicite est même ici (bien qu'il ait résumé la construction derrière un existentiel)
la source
k
et en réécrivant votre équation. Essayez-le en ligne!Java 8,
17887737165 octets-6 octets grâce à @ OlivierGrégoire .
Même explication en bas, mais en utilisant l’équation de base à la place de celle que j’avais utilisée auparavant (grâce à la réponse Python 3 de @LeakyNun pour le conseil implicite):
k = (n - n 3 ) / 6
n == n 3 + (k + 1) 3 + (k-1) 3 - k 3 - k 3
Essayez-le en ligne.
Ancien 178 octets répondent:
Essayez-le en ligne.
Explication:
Je boucle à
k
partir de 0 jusqu'à ce qu'une solution soit trouvée. A chaque itération, il vérifiera ces deux équations: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 3Pourquoi?
Puisque n - n 3 = n * (1-n) * (1 + n) , puis 6 | (nn 3 ) , il est possible d’écrire n - n 3 = 6k .
6k = (k + 1) 3 + (k-1) 3 - k 3 - k 3 .
Et donc n = n 3 + (k + 1) 3 + (k-1) 3 - k 3 - k 3 pour certains k .
La source.
la source
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 utilisant ints pour des résultats moins précis)Gelée , 13 octets
Essayez-le en ligne!
Calculez la formule indépendamment. (x + 1) 3 + (x-1) 3 - 2 × x 3 == 6 × x.
Alternative 13 octets: essayez-le en ligne!
la source
‘c3µ³;;;C;~*3
devrait sauvegarder un octet depuis (n ^ 3-n) / 6 = C (n + 1, 3)Octave ,
474033 octetsEssayez-le en ligne!
Sauvegardé 6 octets grâce à Giuseppe, car j'avais oublié de supprimer certaines anciennes parenthèses. Sauvé un autre octet en changeant les signes, grâce à rafa11111.
Utilise la formule dans l'article math.se lié :
Cela semble plus long si j'essaie de résoudre l'équation: (nn ^ 3) = (k + 1) ^ 3 + (k-1) ^ 3 - k ^ 3 - k ^ 3 en ce qui concerne k , au lieu de en utilisant l'équation.
la source
Fonctions Minecraft (18w11a, 1.13 instantanés), 813 octets
Utilise six fonctions:
une
b
c
ré
e
F
"Prend les entrées" d'un objectif de tableau de bord nommé
n
, créez-le avec/scoreboard objectives add n dummy
puis définissez-le à l'aide de/scoreboard players set x n 5
. Puis appelez la fonction en utilisant/function a
Utilise la formule de cette réponse math.se
la source
JavaScript (Node.js) ,
48 à45 octetsEssayez-le en ligne!
la source
|0
?n**3-n
doit être un multiple de 6 pour un entiern
.MATL , 21 octets
Ceci essaye tous les 5 tuples de nombres de l'ensemble
(-abs(n))^3, (-abs(n)+1)^3, ..., abs(n)^3
. C'est donc très inefficace.Essayez-le en ligne!
la source
Haskell ,
4342 octetsJuste la réponse populaire, traduite en Haskell. Merci à @ rafa11111 pour la sauvegarde d'un octet!
Essayez-le en ligne!
la source
k
assignation ...Coque , 12 octets
Essayez-le en ligne!
Essaie toutes les listes possibles de 5 cubes et renvoie le premier avec la somme correcte.
Explication
la source
C (gcc) ,
858175 octetsSauvegardé 4 octets puis 6 octets grâce à la réorganisation des assignations de @ ceilingcat
Essayez-le en ligne!
la source
Fortran (GFortran) , 53 octets
Essayez-le en ligne!
Python Fortran sortant du golf? Que se passe t-il ici?
la source
Python 3,
656160 octetsEdit: laissé tomber des espaces inutiles.
Edit: merci à la réorganisation intelligente de rafa11111.
Inspiré par cela .
Essayez-le en ligne!
la source
(N**3-N)
et[N,1-k,-1-k,k,k]
R ,
4038 octetsUtilise la formule du message math.SE lié. Jusqu'à 2 octets grâce à Giuseppe.
Essayez-le en ligne!
la source
APL (Dyalog Unicode) ,
30 à26 octetsEssayez-le en ligne!
Traduction APL de la réponse de LeakyNun .
Merci à Adám pour 4 octets en tacite.
Comment?
la source
Coque , 20 octets
Essayez-le en ligne!
Utilise la formule de ce post .
Explication
la source
x86,
4139 octetsImplémentation plutôt simple de la formule avec entrée
ecx
et sortie sur la pile.La chose intéressante est que j'ai utilisé une fonction de cubage, mais puisque
call label
c'est 5 octets , je stocke l'adresse de l'étiquette et utilise les 2 octetscall reg
. De plus, comme je pousse des valeurs dans ma fonction, j'utilise un à lajmp
place deret
. Il est très possible qu'être intelligent avec une boucle et la pile évite d'appeler entièrement.Je n'ai pas fait d'astuces de fantaisie avec cubing, comme utiliser
(k+1)^3 = k^3 + 3k^2 + 3k + 1
.Changelog:
Correction du nombre d'octets en utilisant
not
au lieu deneg
/dec
.-2 octets en
xor
notantedx
puisqu'il est probablement 0 deimul
.Objdump:
Voici ma version de test qui fait tout le cubage à la fin. Une fois les valeurs placées dans la pile, la boucle de cube remplace les valeurs de la pile. Il s’agit actuellement de
42 à40 octets, mais des améliorations devraient être apportées quelque part.la source
Cubiquement , 51 caractères, 55 octets
Essayez-le en ligne!
Apparemment, MDXF a oublié de mettre en œuvre le SBCS ...
la source
Unfunge 98 , 35 octets
Essayez-le en ligne!
Il utilise la formule populaire de cette réponse math.se .
la source
Perl 5
-nE
, 48 octetspointe du chapeau
la source
PowerShell Core , 52 octets
Essayez-le en ligne!
Utilise l'équation
o=o^3 + (1-k)^3 + (-k-1)^3 + k^3 + k^3
, oùk=o^3 - o
; c'est un refactoring mineur du populairel=o-o^3
(aveck=-l
).Comme note de côté, l'expression
l=o-o^3
ressemble à un chat avec une oreille blessée.la source
Ruby , 43 octets
Essayez-le en ligne!
la source