zadanie
Twoim zadaniem jest zbudowanie struktury z kostek. Objętość kostek jest zgodna z następującą sekwencją (dół -> góra)
Wejście
Całkowita objętość struktury ( ).
wynik
wartość ( ), tj .: Całkowita liczba kostek.
notatki
- Dane wejściowe zawsze będą liczbą całkowitą.
- Czasami nie jest możliwe przestrzeganie sekwencji, tzn .: nie reprezentuje określonej wartości dla . W takim przypadku zwróć -1 lub dowolną wartość falsy (wymagana jest jednak spójność).n
- To jest golf golfowy, więc wygrywa najkrótsza odpowiedź w bajtach dla każdego języka.
- Żadna odpowiedź nie zostanie oznaczona jako zaakceptowana z wyżej wymienionego powodu.
upraszanie
- To jest moje pierwsze wyzwanie na stronie, więc bądźcie ze mną i wybaczcie (i powiedzcie mi) wszelkie błędy, które popełniłem.
- Podaj link, aby przetestować kod.
- Jeśli możesz, uprzejmie napisz wyjaśnienie, jak działa Twój kod, aby inni mogli zrozumieć i docenić twoją pracę.
przykłady
input : 4183059834009
output : 2022
input : 2391239120391902
output : -1
input : 40539911473216
output : 3568
Dzięki @Arnauld za link do tego:
Czy to nie miłe?
Link do oryginału: Link
4183059834009
daje wynik2022
?Odpowiedzi:
JavaScript (ES7), 31 bajtów
Formuła bezpośrednia. Zwraca,
0
jeśli nie ma rozwiązania.Wypróbuj online!
W jaki sposób?
Suma pierwszych n kostek jest dana przez:Sn n
(To jest A000537 . Ta formuła może być łatwo udowodniona przez indukcję. Oto ładne graficzne przedstawienie ).S5
Odwrotnie, jeśli jest sumą pierwszych x sześcianów, poniższe równanie dopuszcza dodatnie, całkowite rozwiązanie:v x
Ponieważ jest dodatnia, prowadzi to do:( x2)+ x ) / 2
Którego pozytywne rozwiązanie daje:
Jeśli jest liczbą całkowitą, na pewno jest nieparzysta, ponieważΔjest nieparzyste. Dlatego rozwiązanie można wyrazić jako:r = Δ--√ Δ
Skomentował
Wersja rekurencyjna,
3635 bajtówZwraca,
NaN
jeśli nie ma rozwiązania.Wypróbuj online!
Skomentował
źródło
05AB1E , 6 bajtów
Wypróbuj online!
Port galaretki Jonathana odpowiedź. Weź skumulowaną sumę [0 ... n] , kwadratowy każdego i znaleźć indeks V .
05AB1E , 7 bajtów
Wypróbuj online!
Jak to działa
8 bajtów alternatywnie:
ÝÝÅΔ3mOQ
.źródło
3mO
inO
pracy ... Prawdopodobnie również wspomnieć -1 jest wartością falsy.R ,
4240 bajtów-2 bajty dzięki Giuseppe
Wypróbuj online!
Odpowiedź JavaScript na Port of Arnauld . Zwraca również 0, jeśli nie ma rozwiązania.
źródło
Galaretka ,
54 bajtówŁącze monadyczne daje,
0
jeśli nie jest to możliwe.Wypróbuj online! zbyt mało wydajne dla przypadków testowych! Spacja (O (V): p)
Oto 8-bajtowa wersja, która najpierw wykonuje pierwiastek kostki z V, aby zamiast tego była O (V ^ (1/3)). Używanie tej 8-bajtowej wersji tutaj jest zestawem testowym
W jaki sposób?
źródło
36
IJi
zachowuje się jak²⁼
(Ị
innymi słowy).Eliksir , 53 bajty
Wypróbuj online!
Port galaretki Jonathana odpowiedź.
Eliksir , 74 bajty
Wypróbuj online!
Zdecydowanie nieoptymalne. Ale jestem tylko początkującym Eliksirem! :) Zwraca w
nil
przypadku „nieprawidłowych” wartościV
.źródło
Japt, 7 bajtów
Spróbuj
Wyjaśnienie
Alternatywny
Spróbuj
źródło
Cubix , 27 bajtów (lub tom 27?)
Wydaje się, że to właściwe miejsce dla tego języka.
Wypróbuj online!
To zawija się w kostkę 3x3x3 w następujący sposób
Zobacz, jak biegnie
To podstawowa brutalna siła, odciągając coraz większe kostki od wkładu. Jeśli wynikiem jest zero
n
, wypisz w przeciwnym razie, jeśli wynik jest ujemny, wydrukuj 0 i wyjdź.źródło
Perl 6 ,
302926 bajtów-4 bajty dzięki Jo Kingowi
Wypróbuj online!
Rozwiązanie siły brutalnej dla n <10000. Korzysta z równania z odpowiedzi Jonathana Allana.
3736 bajtów rozwiązanie dla większego n ( -1 bajt dzięki Jo King ):Wypróbuj online!
Zwraca,
False
jeśli nie ma rozwiązania.Wyjaśnienie
źródło
0..$_
być ważny dla wszystkich liczb, nawet jeśli upłynie limit czasu dla większych. Aby normalnie grać w golfa, możesz usunąć.
z pierwszego i zmienić drugi z0>=*
na1>*
JavaScript (Node.js) , 28 bajtów
Wypróbuj online!
Wiem, że to moje własne pytanie, ale mam lepszą odpowiedź (na ten język), więc jest obecny, więc napisałem. Mam nadzieję, że jest ok
źródło
APL (Dyalog) , 18 bajtów
Wypróbuj online!
źródło
Matlab, 27 bajtów
Zwraca
n
if istnieje lub pustą macierz, jeśli nie.Jak to działa
Wypróbuj online!
Uwaga: W przypadku dużych awarii kończy się niepowodzeniem
v
.źródło
Python 3 , 60 bajtów
Wypróbuj online!
-6 dzięki Mr. Xcoder .
Wypróbuj online!
źródło
Perl 6 , 33 bajtów
Wypróbuj online!
To używa metody Arnaulda . Zwraca pusty obiekt, jeśli liczba jest niepoprawna.
źródło
dc , 19 bajtów
Wejście i wyjście pochodzi ze stosu, zwraca 0, jeśli nie ma rozwiązania.
Wypróbuj online!
Wyjaśnienie
Jeśli istnieje rozwiązanie n, dane wejściowe to
((n^2+n)^2)/4
. Więc będziemy obliczać rozwiązanie procesu,n=sqrt(sqrt(4*input))
za pomocą domyślnie 0 miejsc dziesiętnych precyzję DC dla pierwiastków kwadratowych, a następnie porównać(n^2+n)^2
do4*input
, aby zobaczyć, czy to rzeczywiście rozwiązanie.Przedostatnia linia opiera się na nieoczywistym fakcie, że dla dc,
0^x=0
dla wszystkich niezerowychx
(nawet ujemnychx
!), Ale0^0=1
.źródło
Python 3 ,
5348 bajtówWypróbuj online!
-3 bajty od Jo Kinga
Zwraca
-1
brak odpowiedzi.Działa tylko
n=997
z domyślnymi limitami rekurencji.Wielokrotnie pobiera coraz większe kostki z objętości, aż osiągnie zero (sukces, zwracana liczba usuniętych kostek) lub liczba ujemna (brak odpowiedzi).
Wyjaśnienie:
źródło
and/or
lub listy są zwykle krótsze niżif/else
. 50 bajtównot V
=>V==0
lubV>-1
gvm (commit 2612106 ) bytecode,
7059 bajtów(-11 bajtów przez pomnożenie w pętli zamiast pisania kodu do dwukrotnego pomnożenia)
Hexdump:
Przebiegi testowe:
Niezbyt niski wynik, wystarczy użyć tego miłego pytania do testowania
gvm
tutaj;) Zatwierdzenie jest starsze niż pytanie oczywiście. Zauważ, że jest to 8-bitowa maszyna wirtualna, więc używając kodu obsługującego tylko naturalny zakres liczb bez znaku0-255
, przypadki testowe podane w pytaniu nie będą działać.Ręcznie zmontowany z tego:
Edit : Właśnie naprawiono błąd w
gvm
; bez tej poprawki,gvm
próbował czytać programy binarne w trybie tekstowym , które mogą się zepsuć (powyższy kod nie zawiera żadnych0xd
bajtów, więc nie zepsuje się w systemie Windows bez tej poprawki).źródło
K (oK) , 21 bajtów
Wypróbuj online!
Odpowiedź JS Port of Arnauld .
W jaki sposób:
funkcja zwróci
(_r%2)
iff1!r == 0
, w przeciwnym razie zwróci null (0N
). Wynika to z faktu, że pojedynczy element na liście ma indeks 0, a próba indeksowania tej listy dowolną liczbą inną niż 0 zwróci null.źródło