To pytanie jest trudne (a zwłaszcza trudniejsze niż Która duża liczba jest większa? ) Dla tych, którzy lubią trudniejsze łamigłówki.
Wejście
Liczba całkowita a1, a2, a3, a4, a5, b1, b2, b3, b4, b5 każda w zakresie od 1 do 10.
Wynik
True if a1^(a2^(a3^(a4^a5))) > b1^(b2^(b3^(b4^b5))) and False otherwise.
^ jest potęgowaniem w tym pytaniu.
Zasady
To jest golf golfowy. Twój kod musi zostać poprawnie zakończony w ciągu 10 sekund dla każdego ważnego wejścia w TIO . Jeśli Twojego języka nie ma w TIO, kod powinien zakończyć się na twoim komputerze w ciągu 10 sekund.
Możesz wypisać dowolną wartość Prawda dla Prawdy i dowolną Falsey dla False.
Przypadki testowe
Przypomnijmy, że według zasad wykładnika a1 ^ (a2 ^ (a3 ^ (a4 ^ a5))) == a1 ^ a2 ^ a3 ^ a4 ^ a5.
10^10^10^10^10 > 10^10^10^10^9
1^2^3^4^5 < 5^4^3^2^1
2^2^2^2^3 > 10^4^3^2^2
6^7^8^9^10 is not bigger than 6^7^8^9^10
10^6^4^2^2 < 10^6^2^4^2
2^2^2^2^10 > 2^2^2^10^2
10^9^8^7^6 < 6^7^8^9^10
3^1^10^10^10 > 2^1^10^10^10
9^10^10^10^10 < 10^9^10^10^10
Nowe przypadki testowe od Kevina Cruijssena
[10,10,10,10,10, 10,10,10,10,9] #true
[2,2,2,2,3, 10,4,3,2,2] #true
[2,2,2,2,10, 2,2,2,10,2] #true
[10,10,10,10,10, 9,10,10,10,10] #true
[3,2,2,1,1, 2,5,1,1,1] #true
[2,2,3,10,1, 2,7,3,9,1] #true
[7,9,10,10,10, 6,9,10,10,10] #true
[3,2,2,2,2, 2,2,2,2,2] #true
[8,3,1,2,1, 2,2,3,1,1] #true
[2,4,2,1,1, 3,3,2,1,1] #true
[5,4,3,2,1, 1,2,3,4,5] #true
[1,2,3,4,5, 5,4,3,2,1] #false
[6,7,8,9,10, 6,7,8,9,10] #false
[10,6,4,2,2, 10,6,2,4,2] #false
[10,9,8,7,6, 6,7,8,9,10] #false
[1,10,10,10,10, 1,10,10,10,9] #false
[2,4,1,1,1, 2,2,2,1,1] #false
[2,2,2,1,1, 2,4,1,1,1] #false
[2,5,1,1,1, 3,2,2,1,1] #false
[4,2,1,1,1, 2,4,1,1,1] #false
[2,4,1,1,1, 4,2,1,1,1] #false
[2,3,10,1,1, 8,3,9,1,1] #false
[8,3,9,1,1, 2,3,10,1,1] #false
[2,4,1,1,1, 3,3,1,1,1] #false
[2,2,1,9,9, 2,2,1,10,10] #false
[2,2,1,10,10, 2,2,1,9,9] #false
[1,1,1,1,1, 1,2,1,1,1] #false
code-golf
math
restricted-time
Anush
źródło
źródło
Odpowiedzi:
Rubinowy, 150 bajtów
Zobacz wersje poprzednich bajtów.
-10 bajtów dzięki @ValueInk
+16 bajtów dzięki @RosLuP za błędy.
Wypróbuj online .
Porównać różne podstawowe wieże mocy („pięciu” wysokości)?
Nieskluczony kod:
Podział kodu:
Jest to
t
logarytm podstawowy , który zostanie wykorzystany do zmniejszenia wielkości liczb, które porównujemy. Domyślnie bazuje,c
gdy podany jest tylko jeden argument.Te aktualizacje,
i = i ** j
ponieważi
nigdy się nie przyzwyczajają,y
są wynikiemb^c^d^e == g^h^i(^j)
dwukrotnego logowania i przeniesienia wszystkiego na jedną stronę. Następnie niechz = l[a, f] * b ** c
jako podstawa dziennikag
bazy dziennikaf
za ** b ** c
.1^b^c^d^e = 1
nigdy nie jest większyf^g^h^i^j
i podobniea^b^c^d^e
jest zawsze większy niż1^g^h^i^j = 1
gdybya != 1
. Zauważ, żereturn p
zwracanil
, co jest falsey, ireturn 1
zwraca1
, co jest zgodne z prawdą.Jeśli
b == 1
lubg == 1
, następnie zmniejsza się w porównaniua ** b ** c
dof ** g ** h
, co odbywa się za pomocą dwóch rejestrów na obu stronach.Porównuje
a ** b ** c
się tof ** g ** h ** i
przez przestawienie go wlog[log[b ** c * log[a, f], g], h]
porównaniu doi
. (Przypomnij sobiei **= j
na początku iz = log[b ** c * log[a, f], g]
.)Porównuje to 4 najwyższe moce po dwukrotnym zalogowaniu obu stron. Jeśli są równe, porównuje bazę.
źródło
Python 2,
671612495490611597 bajtów-59 bajtów dzięki @EmbodimentOfIgnorance
-117 bajtów dzięki @Neil
+121 bajtów za około pięć poprawek błędów, wszystkie znalezione przez @ngn
Traktuje dane wejściowe jako dwie listy.
UWAGA: Działa również z większymi listami lub o nierównej długości.EDYCJA: już nie prawda; nadal działa, jeśliP(a)
iP(b)
wynik w różnych krotki, ale jeśli są takie same to zaktualizowaną powyższy kod działa tylko z listami o stałym rozmiarze 5 obecnie.Wypróbuj online.
Wyjaśnienie:
Wersja odpowiedzi na golfa na math.stackexchange.com , więc cały kredyt należy do @ThomasAhle .
Cytując swoją odpowiedź:
W odniesieniu do licznika przykładów wspomina w sekcji komentarzy:
Ponieważ plan A i B są nieistotne w tym wyzwaniu, ponieważ wysokość wynosi 5 dla obu wież energetycznych, które wprowadzamy, plan C jest. Więc zmieniłem
P(a)>P(b)
naP(S(a,b))>P(S(b,a))if P(a)==P(b)else P(a)>P(b)
z funkcją rekurencyjnąS(a,b)
. JeśliP(a)
iP(b)
spowoduje to tę samą krotkę,P(S(a,b))>P(S(b,a))
najpierw usunie końcowe wartości, które są równe przy tych samych indeksach, zanim zrobi to samoP(A)>P(B)
sprawdzenie na tych teraz krótszych listach.źródło
[10,10,10,10,10]>[9,10,10,10,10]
R
tylko raz, więc może po prostu ją wstawisz?R
linią 5 ...05AB1E ,
96104 bajtówPort odpowiedzi Ruby @SimplyBeautifulArt , więc upewnij się, że go głosujesz!
POSITIVE_INFINITY
NEGATIVE_INFINITY
0.0
[3,2,2,1,1,2,5,1,1,1]
POSITIVE_INFINITE
[2,4,1,1,1,3,3,1,1,1]
NEGATIVE_INFINITY
Wejście w postaci listy dziesięciu liczb:
[a,b,c,d,e,f,g,h,i,j]
.Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
Jeśli ktoś chce spróbować pograć w golfa, oto program pomocniczy, którego użyłem do uzyskania poprawnych zmiennych z listy danych wejściowych.
źródło
C,
168180 bajtówPort C z odpowiedzi Kevina Cruijssena.
Wypróbuj online
źródło
3,1,10,10,10,2,1,10,10,10
moja podobna odpowiedź Java. I faktycznie jest to część odpowiedzi Ruby @ SimplyBeautifulArt, ponieważ to on wymyślił wszystko i naprawił błędy ..APL (NARS), znaki 118, bajty 236
Funkcja powyżej wywołania z w „az w” zwróci 1, jeśli liczba w a jest większa niż liczba w, w przeciwnym razie zwróci 0.
Jeżeli mam
Będzie to f (aa)> f (bb) z tablicą aa i bb z 5 liczb dodatnich wtedy i tylko wtedy, gdy (jeśli a> 1 aa i bb) log (log (f (aa)))> log ( log (f (bb))) należy użyć praw log ():
dla kompilacji v (aa) = log (log (aa)) = v (a, b, c, d, e) = log (log (a)) + log (b) (c ^ (d ^ e)) = {p (3 ↑ ⍵), / 3 ↓ ⍵}, więc ćwiczenie znajduje się, gdy v (aa)> v (bb).
Ale jest przypadek, w którym zarówno v (aa), jak i v (bb) są nieskończone (APL ma koniec przestrzeni zmiennoprzecinkowej) w takim przypadku użyłbym funkcji niezabezpieczonej
że nie do końca rozumiem, czy jest w porządku i nie bierze pod uwagę również parametru ... test:
źródło
log(log())
, ale dla tego przypadku testowego różnica pomiędzylog(log(10^10^10^10^10))
ilog(log(9^10^10^10^10))
wymagałaby absurdalnej dokładności, aby się na niej zgodzić. Musisz mieć zmiennoprzecinkowy z2e10
dokładnością około 10 cyfr. I to ignoruje fakt, że obie strony są w przybliżeniu tak duże10^10^10
, co trudno mi uwierzyć, że potrafiłeś obliczyć.9, 10, 10, 10, 10, 10, 9, 10, 10, 10
, co powinno wrócić1
, ales(9,10,10,10,10) < s(10,9,10,10,10)
.Java 8,
299288286252210208224 bajtówPort odpowiedzi Ruby @SimplyBeautifulArt , więc upewnij się, że go głosujesz!
-14 bajtów dzięki @SimplyBeautifulArt .
+17 bajtów za te same poprawki błędów, co odpowiedź Ruby.
Wypróbuj online.
Wyjaśnienie:
źródło
x==y
zamiastM.abs(x-y)<1e-9
.t
można usunąć, aby zaoszczędzić jeden bajt, umieszczając goy
tak jak ja. TIO