Biorąc pod uwagę liczbę całkowitą, wypisz pięć doskonałych kostek, których suma jest tą liczbą całkowitą. Zauważ, że kostki mogą być dodatnie, ujemne lub zero. Na przykład,
-10 == -64 - 64 + 64 + 27 + 27
więc dla danych wejściowych -10
można wyprowadzać dane [-64, -64, 64, 27, 27]
, chociaż możliwe są inne rozwiązania. Pamiętaj, że powinieneś generować kostki, a nie liczby w kostkach.
Rozwiązanie zawsze istnieje - możesz samemu rozwiązać zagadkę. Przypuszcza się ponadto, że wystarczą cztery kostki.
-10
innego możliwego rozwiązania może być-1000+4574296+4410944-4492125-4492125
na przykład. I czy wolno generować dane wyjściowe,--
czy+-
zamiast+
/-
odpowiednio (tj.3 = 27+-27+-125--64--64
Zamiast3 = 27-27-135+64+64
)?--5
, powiedziałbym, że nie, zgodnie ze zwykłymi zasadami wyprowadzania wyrażenia .+
znakami, tylko liczby.-10 = -64 - 64 + 64 + 27 + 27
lub-10 = -343 + 0 -8 +125 +216
Odpowiedzi:
Brachylog , 18 bajtów
Wypróbuj online!
Wyjaśnienie
Zasadniczo opisujemy problem, z dodatkowym ograniczeniem, że chcemy, aby lista wyników nie zwiększała się pod względem wielkości: to zmusza Brachylog do prawidłowego śledzenia wszystkich możliwych kombinacji 5 wartości, zamiast nieskończonego cofania się w stosunku do wartości ostatniej element listy.
Znajdowanie różnych rozwiązań
Dołączając a
≜
, można użyć tego predykatu, aby znaleźć wszystkie rozwiązania o rosnących rozmiarach: na przykład, oto pierwsze 10 rozwiązań dla42
źródło
Brachylog , 11 bajtów
Dzięki Fatalize za uratowanie jednego bajtu
Wypróbuj online!
Po pierwsze
~+
wymusza, że wyjście (.
) musi sumować się z danymi wejściowymi.l₅
ponownie ogranicza wynik, dyktując, że musi on mieć długość 5.≥₁
deklaruje, że lista musi być w porządku malejącym (uważam, że jest to konieczne, aby zatrzymać program wchodzący w nieskończoną pętlę)Wyraźnie ujednolicamy tę listę ze
.
zmienną wyjściową, ponieważ nasz następny predykat „zmieni” wartości na liście. Następnie pobieramy pierwiastek sześcienny każdej wartości z listy za pomocą√₃ᵐ
. Ponieważ Brachylog jest z natury oparty na liczbach całkowitych, dyktuje to, że wszystkie liczby na liście są liczbami kostek.Wreszcie używamy,
∧
ponieważ.
na końcu każdej linii jest niejawnie dodane. Ponieważ nie chcemy.
być zunifikowani z listą pierwiastków kostki, ujednoliciliśmy ją wcześniej i używamy∧
do zatrzymania jej zjednoczenia na końcu.źródło
Python 2 ,
585754 bajtówWypróbuj online!
źródło
k=-(n-n**3)/6;[v**3for v in~k,1-k,n,k,k]
-(n-n**3)
nie możesz użyć(n**3-n)
?Python 3 , 65 bajtów
Wypróbuj online!
To znaczy, wyraźny formuła jest jeszcze tutaj (choć oderwana budowę za egzystencjalny)
źródło
k
i przepisując równanie. Wypróbuj online!Java 8,
17887737165 bajtów-6 bajtów dzięki @ OlivierGrégoire .
To samo wyjaśnienie na dole, ale przy użyciu równania podstawowego zamiast pochodnego, którego użyłem wcześniej (dzięki odpowiedzi Python 3 @LeakyNun na niejawną wskazówkę):
k = (n - n 3 ) / 6
n == n 3 + (k + 1) 3 + (k-1) 3 - k 3 - k 3
Wypróbuj online.
Stara 178 bajtów odpowiedź:
Wypróbuj online.
Wyjaśnienie:
Pętlę
k
od 0 w górę, aż do znalezienia rozwiązania. W każdej iteracji sprawdzi te dwa równania: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 3Czemu?
Ponieważ n - n 3 = n * (1-n) * (1 + n), a następnie 6 | (nn 3 ) , można go zapisać jako n - n 3 = 6k .
6k = (k + 1) 3 + (k-1) 3 - k 3 - k 3 .
I dlatego n = n 3 + (k + 1) 3 + (k-1) 3 - k 3 - k 3 dla niektórych k .
Źródło.
źródło
n->new long[]{n*n*n,(n=(n-n*n*n)/6+1)*n*n--,--n*n*n,n=-++n*n*n,n}
(lub 64 przy użyciu liczb wewnętrznych dla mniej dokładnych wyników)Galaretka , 13 bajtów
Wypróbuj online!
Oblicz formułę niezależnie. (x + 1) 3 + (x-1) 3 - 2 × x 3 == 6 × x.
Alternatywne 13 bajtów: Wypróbuj online!
źródło
‘c3µ³;;;C;~*3
powinien zapisać bajt, ponieważ (n ^ 3-n) / 6 = C (n + 1, 3)Oktawa ,
474033 bajtówWypróbuj online!
Zaoszczędziłem 6 bajtów dzięki Giuseppe, ponieważ zapomniałem usunąć stare nawiasy. Zaoszczędził kolejne bajty, zmieniając znaki, dzięki rafa11111.
Używa formuły w połączonym poście math.se :
Wydaje się być dłuższy, jeśli spróbuję rozwiązać równanie: (nn ^ 3) = (k + 1) ^ 3 + (k-1) ^ 3 - k ^ 3 - k ^ 3 w odniesieniu do k , zamiast po prostu używając równania.
źródło
Funkcje Minecraft (18w11a, migawki 1.13), 813 bajtów
Korzysta z sześciu funkcji:
za
b
do
re
mi
fa
„Pobiera dane wejściowe” z nazwanego celu tablicy wyników
n
, utwórz go,/scoreboard objectives add n dummy
a następnie ustaw za pomocą/scoreboard players set x n 5
. Następnie wywołaj funkcję za pomocą/function a
Używa formuły z tej odpowiedzi matematycznej
źródło
JavaScript (Node.js) ,
4845 bajtówWypróbuj online!
źródło
|0
?n**3-n
musi być wielokrotnością liczby 6 dla liczby całkowitejn
.MATL , 21 bajtów
Spróbuje wszystkich 5 krotek liczb z zestawu
(-abs(n))^3, (-abs(n)+1)^3, ..., abs(n)^3
. Jest to więc bardzo nieefektywne.Wypróbuj online!
źródło
Haskell ,
4342 bajtyTylko popularna odpowiedź przetłumaczona na Haskell. Dzięki @ rafa11111 za uratowanie bajtu!
Wypróbuj online!
źródło
k
przydziale ...Łuska , 12 bajtów
Wypróbuj online!
Próbuje wszystkich możliwych list 5 kostek i zwraca pierwszą z poprawną sumą.
Wyjaśnienie
źródło
C (gcc) ,
858175 bajtówZaoszczędzono 4 bajty, a następnie 6 bajtów dzięki zmianie kolejności przydziałów @ ceilingcat
Wypróbuj online!
źródło
Fortran (GFortran) , 53 bajty
Wypróbuj online!
Fortran outgolfing Python? Co tu się dzieje?
źródło
Python 3,
656160 bajtówEdycja: usunięto niepotrzebne spacje.
Edycja: dzięki inteligentnej zmianie kolejności rafa11111.
Zainspirowany tym .
Wypróbuj online!
źródło
(N**3-N)
i[N,1-k,-1-k,k,k]
R ,
4038 bajtówWykorzystuje formułę w powiązanym poście math.SE. Do 2 bajtów dzięki Giuseppe.
Wypróbuj online!
źródło
APL (Dyalog Unicode) ,
3026 bajtówWypróbuj online!
Tłumaczenie APL odpowiedzi LeakyNun .
Dzięki Adám za 4 bajty, idąc milcząco.
W jaki sposób?
źródło
Łuska , 20 bajtów
Wypróbuj online!
Używa formuły z tego postu .
Wyjaśnienie
źródło
x 86,
4139 bajtówNajczęściej prosta implementacja formuły z wejściem
ecx
i wyjściem na stosie.Interesujące jest to, że użyłem funkcji dzielenia, ale ponieważ
call label
jest to 5 bajtów , przechowuję adres etykiety i używam 2 bajtówcall reg
. Ponadto, ponieważ wypycham wartości w mojej funkcji, używamjmp
zamiastret
. Jest bardzo możliwe, że bycie sprytnym z pętlą i stosem może całkowicie uniknąć sprawdzania.Nie robiłem żadnych fantazyjnych sztuczek z kostką, jak używanie
(k+1)^3 = k^3 + 3k^2 + 3k + 1
.Dziennik zmian:
Napraw liczbę bajtów za pomocą
not
zamiastneg
/dec
.-2 bajty, nie
xor
ing,edx
ponieważ prawdopodobnie jest to 0 zimul
.Objdump:
Oto moja wersja testowa, która wykonuje całą kostkę na końcu. Po wypchnięciu wartości na stos pętla kostki zastępuje wartości stosu. Obecnie ma
4240 bajtów, ale gdzieś powinny być jakieś ulepszenia.źródło
Sześciennie , 51 znaków, 55 bajtów
Wypróbuj online!
Najwyraźniej MDXF zapomniał wdrożyć SBCS ...
źródło
Unefunge 98 , 35 bajtów
Wypróbuj online!
Wykorzystuje popularną formułę z odpowiedzi matematycznej .
źródło
Perl 5
-nE
, 48 bajtówczapka z daszkiem
źródło
PowerShell Core , 52 bajty
Wypróbuj online!
Korzysta z równania
o=o^3 + (1-k)^3 + (-k-1)^3 + k^3 + k^3
, gdziek=o^3 - o
; jest to niewielkie refaktoryzacja popularnegol=o-o^3
(zk=-l
).Na marginesie, wyrażenie
l=o-o^3
wygląda jak kot z bolącym uchem.źródło
Rubinowy , 43 bajty
Wypróbuj online!
źródło