Bei einer gegebenen Ganzzahl werden fünf perfekte Würfel ausgegeben, deren Summe diese Ganzzahl ist. Beachten Sie, dass Würfel positiv, negativ oder null sein können. Beispielsweise,
-10 == -64 - 64 + 64 + 27 + 27
Für die Eingabe können -10
Sie also eine Ausgabe durchführen [-64, -64, 64, 27, 27]
, obwohl auch andere Lösungen möglich sind. Beachten Sie, dass Sie die Würfel ausgeben sollten, nicht die Zahlen, die gewürfelt werden.
Es gibt immer eine Lösung - vielleicht haben Sie Spaß daran, dies selbst herauszufinden. Es wird weiter vermutet, dass vier Würfel ausreichen.
-10
andere mögliche Lösung könnte-1000+4574296+4410944-4492125-4492125
beispielsweise sein. Und darf ausgegeben werden--
oder+-
anstelle von+
/-
bzw. (dh3 = 27+-27+-125--64--64
anstelle von3 = 27-27-135+64+64
)?--5
, würde ich nein sagen, wie es bei der Ausgabe eines Ausdrucks üblich ist .+
Vorzeichen ausgeben, sondern nur die Zahlen.-10 = -64 - 64 + 64 + 27 + 27
oder-10 = -343 + 0 -8 +125 +216
Antworten:
Brachylog , 18 Bytes
Probieren Sie es online!
Erläuterung
Wir beschreiben das Problem im Grunde genommen mit der zusätzlichen Einschränkung, dass die Ausgabeliste in Bezug auf die Größen nicht ansteigen soll: Dies zwingt Brachylog, alle möglichen Kombinationen von 5 Werten ordnungsgemäß zurückzuverfolgen, anstatt den Wert des letzten Wertes unendlich zurückzuverfolgen Element der Liste.
Verschiedene Lösungen finden
Durch Anhängen von a
≜
ist es möglich, mit diesem Prädikat alle Lösungen mit zunehmender Größe zu finden: Hier sind beispielsweise die ersten 10 Lösungen für42
quelle
Brachylog , 11 Bytes
Danke Fatalize für das Speichern eines Bytes
Probieren Sie es online!
Erstens
~+
erzwingt , daß der Ausgang (.
) an die Eingangssumme muß.l₅
schränkt die Ausgabe erneut ein und schreibt vor, dass sie eine Länge von 5 haben≥₁
mussWir vereinheitlichen diese Liste explizit mit
.
der Ausgabevariablen, da unser nächstes Prädikat die Werte in der Liste "ändert". Wir nehmen dann die Kubikwurzel von jedem Wert in der Liste mit√₃ᵐ
. Da Brachylog von Natur aus ganzzahlig ist, bedeutet dies, dass alle Zahlen in der Liste Würfelnummern sind.Schließlich verwenden wir,
∧
weil.
am Ende jeder Zeile ein impliziter Zusatz steht. Da wir nicht.
mit der Liste der Kubikwurzeln vereinheitlicht werden möchten , haben wir sie früher vereinheitlicht und∧
beenden sie am Ende mit.quelle
Python 2 ,
585754 BytesProbieren Sie es online!
quelle
k=-(n-n**3)/6;[v**3for v in~k,1-k,n,k,k]
-(n-n**3)
kannst du nicht benutzen(n**3-n)
?Python 3 , 65 Bytes
Probieren Sie es online!
Ich meine, eine explizite Formel gibt es auch hier (obwohl er die Konstruktion hinter einer existenziellen abstrahiert)
quelle
k
Ihre Gleichung invertieren und neu schreiben. Probieren Sie es online!Java 8,
17887737165 Bytes-6 Bytes dank @ OlivierGrégoire .
Dieselbe Erklärung unten, aber unter Verwendung der Basisgleichung anstelle der abgeleiteten, die ich zuvor verwendet habe (dank der Antwort von @LeakyNun in Python 3 für den impliziten Tipp):
k = (n - n 3 ) / 6
n == n 3 + (k + 1) 3 + (k - 1) 3 - k 3 - k 3
Probieren Sie es online aus.
Alte 178 Bytes Antwort:
Probieren Sie es online aus.
Erläuterung:
Ich schleife
k
von 0 aufwärts, bis eine Lösung gefunden wird. In jeder Iteration werden diese beiden Gleichungen überprüft: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 3Warum?
Da n - n 3 = n * (1 - n) * (1 + n) und dann 6 | (nn 3 ) ist , kann es als n - n 3 = 6k geschrieben werden .
6k = (k + 1) 3 + (k-1) 3 - k 3 - k 3 .
Und deshalb ist n = n 3 + (k + 1) 3 + (k-1) 3 - k 3 - k 3 für einige k .
Quelle.
quelle
n->new long[]{n*n*n,(n=(n-n*n*n)/6+1)*n*n--,--n*n*n,n=-++n*n*n,n}
(oder 64 mit Ints für weniger genaue Ergebnisse)Jelly , 13 Bytes
Probieren Sie es online!
Finde die Formel unabhängig heraus. (x + 1) 3 + (x-1) 3 - 2 × x 3 == 6 × x.
Alternative 13 Bytes: Probieren Sie es online!
quelle
‘c3µ³;;;C;~*3
sollte ein Byte speichern, da (n ^ 3-n) / 6 = C (n + 1, 3)Oktave ,
474033 BytesProbieren Sie es online!
Dank Giuseppe 6 Bytes gespart, da ich vergessen hatte, alte Klammern zu entfernen. Sparte dank rafa11111 weitere Bytes durch Ändern der Vorzeichen.
Verwendet die Formel im verknüpften Beitrag von math.se :
Es scheint länger zu sein, wenn ich versuche , die Gleichung zu lösen : (nn ^ 3) = (k + 1) ^ 3 + (k-1) ^ 3 - k ^ 3 - k ^ 3 in Bezug auf k , anstatt nur unter Verwendung der Gleichung.
quelle
Minecraft-Funktionen (18w11a, 1.13 Schnappschüsse), 813 Bytes
Verwendet sechs Funktionen:
ein
b
c
d
e
f
"Nimmt Eingaben" von einem Scoreboard-Ziel mit dem Namen
n
, erstelle es mit/scoreboard objectives add n dummy
und setze es dann mit/scoreboard players set x n 5
. Rufen Sie dann die Funktion mit auf/function a
Verwendet die Formel aus dieser math.se-Antwort
quelle
JavaScript (Node.js) ,
48-45ByteProbieren Sie es online!
quelle
|0
?n**3-n
muss ein Vielfaches von 6 für eine Ganzzahl seinn
.MATL , 21 Bytes
Dies versucht alle 5-Tupel von Zahlen aus dem Satz
(-abs(n))^3, (-abs(n)+1)^3, ..., abs(n)^3
. Es ist also sehr ineffizient.Probieren Sie es online!
quelle
Haskell ,
4342 BytesNur die beliebte Antwort, übersetzt nach Haskell. Vielen Dank an @ rafa11111 für das Speichern eines Bytes!
Probieren Sie es online!
quelle
k
Schale , 12 Bytes
Probieren Sie es online!
Versucht alle möglichen Listen mit 5 Würfeln und gibt den ersten mit der korrekten Summe zurück.
Erläuterung
quelle
C (GCC) ,
858175 Bytes4 Bytes und dann 6 Bytes dank @ ceilingcats Neuordnung der Zuordnungen gespart
Probieren Sie es online!
quelle
Fortran (GFortran) , 53 Bytes
Probieren Sie es online!
Fortran, das Python ausgolft? Was ist hier los?
quelle
Python 3,
656160 BytesBearbeiten: Es wurden unnötige Leerzeichen entfernt.
Bearbeiten: dank der intelligenten Neuordnung von rafa11111.
Davon inspiriert .
Probieren Sie es online!
quelle
(N**3-N)
und[N,1-k,-1-k,k,k]
R ,
4038 BytesVerwendet die Formel im verknüpften math.SE-Beitrag. Bis zu 2 Bytes dank Giuseppe.
Probieren Sie es online!
quelle
APL (Dyalog Unicode) ,
3026 BytesProbieren Sie es online!
APL-Übersetzung der Antwort von LeakyNun .
Vielen Dank an Adám für 4 Bytes.
Wie?
quelle
Schale , 20 Bytes
Probieren Sie es online!
Verwendet die Formel aus diesem Beitrag .
Erläuterung
quelle
x86,
4139 BytesMeist unkomplizierte Umsetzung der Formel mit Ein-
ecx
und Ausgabe auf dem Stack.Das Interessante ist, dass ich eine Cubing-Funktion verwendet habe, aber da sind
call label
es 5 Bytes , speichere ich die Adresse des Etiketts und verwende die 2 Bytescall reg
. Da ich in meiner Funktion Werte pushe, verwende ichjmp
stattret
. Es ist sehr wahrscheinlich, dass ein geschickter Umgang mit einer Schleife und dem Stack einen Aufruf ganz vermeiden kann.Ich habe keine ausgefallenen Tricks mit Würfeln gemacht, wie mit
(k+1)^3 = k^3 + 3k^2 + 3k + 1
.Änderungsprotokoll:
Anzahl der Bytes korrigieren mit
not
anstelle vonneg
/dec
.-2 Bytes von nicht
xor
ing ,edx
da es wahrscheinlich 0 aus istimul
.Objektspeicherauszug:
Hier ist meine Testversion, die das Cubing am Ende erledigt. Nachdem die Werte auf den Stapel verschoben wurden, überschreibt die Cube-Schleife die Stapelwerte. Derzeit sind es
42 bis40 Bytes, aber irgendwo sollte es einige Verbesserungen geben.quelle
Kubisch , 51 Zeichen, 55 Bytes
Probieren Sie es online!
Anscheinend hat MDXF vergessen, das SBCS zu implementieren ...
quelle
Unefunge 98 , 35 Bytes
Probieren Sie es online!
Es wird die beliebte Formel aus dieser math.se-Antwort verwendet .
quelle
Perl 5
-nE
, 48 BytesHutspitze
quelle
PowerShell Core , 52 Byte
Probieren Sie es online!
Verwendet die Gleichung
o=o^3 + (1-k)^3 + (-k-1)^3 + k^3 + k^3
, wok=o^3 - o
; Dies ist ein kleines Refactoring des Populärenl=o-o^3
(mitk=-l
).Als Randnotiz
l=o-o^3
sieht der Ausdruck aus wie eine Katze mit einem verletzten Ohr.quelle
Ruby , 43 Bytes
Probieren Sie es online!
quelle