Która duża liczba jest większa?


22

Wkład

Każda liczba całkowita a1, a2, a3, b1, b2, b3 w zakresie od 1 do 20.

Wydajność

True if a1^(a2^a3) > b1^(b2^b3) 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 na standardowym komputerze stacjonarnym.

Możesz wypisać dowolną wartość Prawda dla Prawdy i dowolną Falsey dla False.

Możesz przyjąć dowolną kolejność wprowadzania danych, o ile podana jest w odpowiedzi i zawsze taka sama.

W przypadku tego pytania Twój kod powinien zawsze być poprawny. Oznacza to, że nie powinno to zawieść z powodu niedokładności zmiennoprzecinkowych. Ze względu na ograniczony zakres danych wejściowych nie powinno to być zbyt trudne do osiągnięcia.

Przypadki testowe

3^(4^5) > 5^(4^3)
1^(2^3) < 3^(2^1)
3^(6^5) < 5^(20^3)
20^(20^20) > 20^(20^19)
20^(20^20) == 20^(20^20)
2^2^20 > 2^20^2
2^3^12 == 8^3^11
1^20^20 == 1^1^1
1^1^1 == 1^20^20

Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
DJMcMayhem

Odpowiedzi:


16

Perl 6 , 31 29 bajtów

-2 bajty dzięki Grimy

*.log10* * ***>*.log10* * ***

Wypróbuj online!

Wierzcie lub nie, to nie jest esolang, nawet jeśli składa się głównie z gwiazdek. To używa formuły Arnaulda , z log10 zamiast ln.


Uważam, że to się nie udaje 2^3^12 == 8^3^11.
Ørjan Johansen

@ ØrjanJohansen To powinno zostać naprawione teraz. daj mi znać, jeśli to się nie powiedzie
Jo King


@Grimy Thanks! Mógłbym przysiąc, że spróbowałem ...
Jo King


6

05AB1E , 11 9 11 7 bajtów

.²Šm*`›

Port @Arnauld 's JavaScript i @digEmAll R' s podchodzi (widziałem je dodawać w tym samym czasie)
-2 bajty dzięki @Emigna
+2 bajtów jak bug-fix po @Arnauld 's i @digEmAll odpowiedzi jest zawarta błąd
-4 bajty teraz, gdy dozwolona jest inna kolejność wprowadzania po komentarzach @LuisMendo

Wejście jak [a1,b1], [a3,b3], [a2,b2]w trzech oddzielonych wejść.

Wypróbuj online lub sprawdź wszystkie przypadki testowe .

Wyjaśnienie:

       # Take the logarithm with base 2 of the implicit [a1,b1]-input
  Š      # Triple-swap a,b,c to c,a,b with the implicit inputs
         #  The stack order is now: [log2(a1),log2(b1)], [a2,b2], [a3,b3]
   m     # Take the power, resulting in [a2**a3,b2**b3]
    *    # Multiply it with the log2-list, resulting in [log2(a1)*a2**a3,log2(b1)*b2**b3]
     `   # Push both values separated to the stack
        # And check if log2(a1)*a2**a3 is larger than log2(b1)*b2**b3
         # (after which the result is output implicitly)

1
Drugą wersją może być εć.²š] P` ›
Emigna

@Emigna Ach miło, patrzyłem na podejście ć, ale całkowicie zapomniałem o użyciu š(nie jestem pewien, dlaczego teraz to widzę, haha). Dzięki!
Kevin Cruijssen

To wydaje się niepoprawne (ponieważ odpowiedź Arnaulda była niepoprawna do ostatniej poprawki).
Anush

@Anush Naprawiono i zapisano 4 bajty, biorąc teraz dane wejściowe w innej kolejności. :)
Kevin Cruijssen



3

J , 11 9 bajtów

>&(^.@^/)

Wypróbuj online!

Argumenty podane jako listy.

  • > czy lewy jest większy?
  • &(...) ale najpierw przekształć odpowiednio każdy argument:
  • ^.@^/zmniejszaj go od prawej do lewej z eksponencją. Ale ponieważ zwykłe potęgowanie ograniczy błąd nawet dla liczb rozszerzonych, bierzemy logi obu stron


3

Python 3 , 68 bajtów

lambda a,b,c,d,e,f:log(a,2)*(b**c)>log(d,2)*(e**f)
from math import*

Wypróbuj online!

Port odpowiedzi @Arnualds, ale zmieniono bazę logów.


^jest wywoływany **w Pythonie. Po tej zmianie nie będzie można uruchomić wszystkich przypadków testowych OP.
Ørjan Johansen

Powinno być teraz wszystko naprawione, jednak 66 bajtów.
Artemis obsługuje Monikę

Uważam, że to się nie udaje 2^3^12 == 8^3^11.
Ørjan Johansen

@ ØrjanJohansen powinien zostać naprawiony
Artemis obsługuje Monikę

Wygląda jak to. Oprócz logarytmicznej zmiany podstawy dla poprawki, wygląda to podobnie do metody Arnaulda.
Ørjan Johansen

2

05AB1E , 13 bajtów

Wykorzystuje metodę z odpowiedzi JS Arnaulda

2F.²IIm*ˆ}¯`›

Wypróbuj online!


To nie kończy się dla a1 = 20, a2 = 20, a3 = 20.
Anush

1
@Anush: Wydaje mi się, że zakończy się w mniej niż sekundę.
Emigna

trzeba ustawić wszystkie zmienne do 20. Patrz tio.run/##yy9OTMpM/f9f79Du3GK9Q6tzHzXs@v8/2shAB4xiuRBMAA
anuś

@Anush: Ach, miałeś na myśli b1=b2=b3=20, tak, to się nie kończy.
Emigna

1
@Anush: Zostało już naprawione. Dzięki za zwrócenie uwagi na mój błąd :)
Emigna,

2

Excel, 28 bajtów

=B1^C1*LOG(A1)>E1^F1*LOG(D1)

Implementacja Excel tej samej formuły, która już była używana.


Rozumiem, że Excel ma 15 cyfr dokładności, więc mogą wystąpić przypadki, w których zaokrąglenie spowoduje zwrócenie błędnej odpowiedzi.
Akumulacja

2

JavaScript, 51 bajtów

f=(a,b,c,h,i,j)=>(l=Math.log)(a)*b**c-l(h)*i**j>1e-8

Co zaskakujące, przypadki testowe nie wykazują błędów zmiennoprzecinkowych. Nie wiem, czy kiedykolwiek tak się stanie.

To po prostu porównuje logarytm liczb.

Tolerancja równości jest równa 1e-8.


Witamy w PPCG! Niestety nie powiedzie się to w moim 2^3^12 == 8^3^11przypadku testowym. W rzeczywistości twoja odpowiedź jest bardzo podobna do oryginalnej odpowiedzi Arnaulda (niestety raczej skreślona niż naprawiona), która zainspirowała większość tych, którzy jej nie zdołali.
Ørjan Johansen

@ Ørjan Johansen Przeniesiono l(h)w prawo, a może teraz działa? Edycja: Czekaj, nie robi.
Naruyoko,

Dodano tolerancję równości 0.01.
Naruyoko,

Przeprowadziłem szybkie wyszukiwanie i tolerancja powinna zadziałać, ale jest to trochę za wysoka. Najwyższą wartością, którą musisz wykluczyć, jest (5.820766091346741e-11,(8.0,3.0,11,2.0,3.0,12))(mój przypadek testowy), a najniższą, którą musisz uwzględnić, jest (9.486076692724055e-4,(17.0,19.0,1,3.0,7.0,2))( 3^7^2 > 17^19^1.) Więc coś takiego 1e-8powinno być bezpiecznie w środku i tej samej długości bajtów.
Ørjan Johansen

@ Ørjan Johansen Ok, dzięki!
Naruyoko,

1

bc -l, 47 bajtów

l(read())*read()^read()>l(read())*read()^read()

z wejściem odczytanym z STDIN, jedna liczba całkowita na linię.

bcjest dość szybki; obsługuje a = b = c = d = e = f = 1 000 000 w nieco ponad sekundę na moim laptopie.


Uwielbiam odpowiedź BC! Teraz potrzebuję tylko jednego w bash :)
Anush

1

C ++ (gcc) , 86 bajtów

Dzięki @ ØrjanJohansen za wskazanie błędu w tym i @Ourous za naprawienie.

#import<cmath>
int a(int i[]){return pow(i[1],i[2])/pow(i[4],i[5])>log(i[3])/log(*i);}

Wypróbuj online!

zabdo>remifa


Formuła po zażyciu logdwa razy powinna być i[2]*log(i[1])+log(log(*i)). Np. Obecny nie powiedzie się 2^2^20 > 4^2^18.
Ørjan Johansen

@ ØrjanJohansen: good catch! Chyba muszę wtedy użyć tej powmetody.
Neil A.

Ten alternatywny ma 2^3^12 == 8^3^11problem, który wskazałem innym.
Ørjan Johansen

@ ØrjanJohansen: myślę, że wtedy używam twojej ustalonej formuły.
Neil A.

Och, obawiam się, że formuła jest tylko matematycznie poprawna. To wciąż ma problem błędu pływający punkt, tylko z innym przypadku 2^3^20 == 8^3^19. W rzeczywistości metoda mocy zawiedzie średnio mniej, prawdopodobnie dlatego, że ma tendencję do mnożenia przez potęgę dwóch. Inni zdołali sprawić, by działał, po prostu lekko go poprawiając.
Ørjan Johansen

1

Galaretka , 8 bajtów

l⁵×*/}>/

Wypróbuj online!

Na podstawie odpowiedzi JS Arnaulda . Oczekuje jako danych wejściowych [a1, b1]jako argument lewy i [[a2, b2], [a3, b3]]argument prawy.

Teraz zmieniono na używanie logu do bazy 10, która, o ile poprawnie obsługuje wszystkie możliwe dane wejściowe w określonym zakresie. Dzięki Ørjan Johansen za znalezienie oryginalnego problemu!


1
Uważam, że to się nie udaje 2^3^12 == 8^3^11.
Ørjan Johansen

Twoje Python TIO jest niepoprawne. Masz 8*zamiast 8**. @ ØrjanJohansen jest rzeczywiście poprawny, 2**(3**12) > 8**(3**11)to jest falsey, ponieważ są one równe.
Kevin Cruijssen

@KevinCruijssen oops. Tak, są rzeczywiście równe. Powód, dla którego dwa pierwotne są oznaczone jako różne, dotyczy błędu zmiennoprzecinkowego.
Nick Kennedy

1

TI-BASIC, 27 31 bajtów

ln(Ans(1))Ans(2)^Ans(3)>Ans(5)^Ans(6)(ln(Ans(4

6Ans

Przykłady:

{3,4,5,5,4,3
   {3 4 5 5 4 3}
prgmCDGF16
               1
{20,20,20,20,20,19       ;these two lines go off-screen
{20 20 20 20 20 19}
prgmCDGF16
               1
{3,6,5,5,20,3
  {3 6 5 5 20 3}
prgmCDGF16
               0

Wyjaśnienie:

ln(Ans(1))Ans(2)^Ans(3)>Ans(5)^Ans(6)(ln(Ans(4   ;full program
                                                 ;elements of input denoted as:
                                                 ; {#1 #2 #3 #4 #5 #6}

ln(Ans(1))Ans(2)^Ans(3)                          ;calculate ln(#1)*(#2^#3)
                        Ans(5)^Ans(6)(ln(Ans(4   ;calculate (#5^#6)*ln(#4)
                       >                         ;is the first result greater than the
                                                 ; second result?
                                                 ; leave answer in "Ans"
                                                 ;implicit print of "Ans"

Uwaga: TI-BASIC jest językiem tokenizowanym. Liczba znaków nie jest równa liczbie bajtów.


Nie jestem zaznajomiony z TI-Basic, ale to wydaje się być log(x) × y × zraczej niż log(x) × y ^ z. Niekoniecznie doprowadzi to do takiej samej kolejności jak pierwotna nierówność.
Nick Kennedy,

@NickKennedy Tak, masz rację co do tego! Zaktualizuję post, aby to uwzględnić.
Tau

1

APL (NARS), znaki 36, bajty 72

{>/{(a b c)←⍵⋄a=1:¯1⋄(⍟⍟a)+c×⍟b}¨⍺⍵}

Tutaj poniżej funkcja z w (abc) z (xyt) zwróci 1, jeśli a ^ (b ^ c)> x ^ (y ^ t) w przeciwnym razie zwróci 0; test

  z←{>/{(a b c)←⍵⋄a=1:¯1⋄(⍟⍟a)+c×⍟b}¨⍺⍵}
  3 4 5 z 5 4 3
1
  1 2 3 z 3 2 1
0
  3 6 5 z 5 20 3
0
  20 20 20 z 20 20 19
1
  20 20 20 z 20 20 20
0
  2 2 20 z 2 20 2
1
  2 3 12 z 8 3 11
0
  1 20 20 z 1 1 1
0
  1 1 1 z 1 20 20
0
  1 4 5 z 2 1 1
0

{(abc) ← ⍵⋄a = 1: ¯1⋄ (⍟⍟a) + c × ⍟b} to funkcja p (a, b, c) = log (log (a)) + c * log (b ) = log (log (a ^ b ^ c)), a jeśli aa = a ^ (b ^ c) z a, b, c> 0 oraz a> 1 bb = x ^ (y ^ t) z x, y, t> 0 i x> 1 niż

aa>bb <=> log(log(a^b^c))>log(log(x^y^t))  <=>  p(a,b,c)>p(x,y,t)

Wystąpił problem z funkcją p: Gdy a ma wartość 1, dziennik log 1 nie istnieje, więc wybieram reprezentowanie go liczbą -1; gdy a = 2, więc dziennik a jest liczbą ujemną, ale> -1.

PS. Widział funkcję w swoim większym zestawie, w którym jest zdefiniowana

p(a,b,c)=log(log(a))+c*log(b)

pojawia się zakres dla a, b, cw 1..20 jest za mało ... Jeśli ktoś widzi, kiedy przepełnia się logarytmiczną podstawą 10, zakres dla a, b, c może wynosić 1..10000000 lub większy dla 64 bitów typ pływaka.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.