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

11

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
Anush
źródło
5
VTC to mówię, nawet jeśli to nie jest dupek; jest zbyt blisko wyzwania, które opublikowałeś 4 godziny wcześniej i pokazuje brak wysiłku, aby wymyślić unikalne wyzwania.
Magic Octopus Urn,
3
Wydaje mi się, że 9 osób zgodziło się co do mojej opinii; ale, jak mówisz, wybór należy zachować, mimo że ma 9 głosów negatywnych. Właśnie rzucił nieco światła na to, dlaczego mogą występować głosy negatywne.
Magic Octopus Urn,
3
Szczerze mówiąc, był tylko moim człowiekiem za dwa centy; nie musimy tutaj wchodzić w szczegóły. Żałuję, że cokolwiek powiedziałem; ostatnią rzeczą, jakiej chciałem, była argumentująca odpowiedź. Właśnie stwierdziłem, dlaczego dałem -1.
Magic Octopus Urn,
7
Głosuję za ponownym otwarciem tego postu, ponieważ ma on inny parametr trudności, a wymagane podejście do jego rozwiązania jest bardzo różne. Meta post .
user202729,
3
Sugerowane przypadki testowe (dla przypadków skrajnych napotykanych przez odpowiedzi na Python, Ruby, Java i 05AB1E)
Kevin Cruijssen

Odpowiedzi:

8

Rubinowy, 150 bajtów

Zobacz wersje poprzednich bajtów.

->a,b,c,d,e,f,g,h,i,j{l=->s,t=c{Math.log(s,t)};y,z=l[l[g,b]]-d**e+l[h]*i**=j,l[l[a,f]*b**c,g];a>1?f<2?1:b<2||g<2?z>h:c<2||d<2?l[z,h]>i:y==0?a>f:y<0:p}

-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:

-> a, b, c, d, e, f, g, h, i, j {
    l =-> s, t = c {Math.log(s, t)}
    i **= j
    y = l[l[g, b]] - d ** e + l[h] * i
    z = l[l[a, f] * b ** c, g]
    if a == 1
        return p
    elsif f == 1
        return 1
    elsif b == 1 || g == 1
        return z > h
    elsif d == 1 || c == 1
        return l[z, h] > i
    elsif y == 0
        return a > f
    else
        return y < 0
    end
}

Podział kodu:

l =-> s, t = c {Math.log(s, t)}

Jest to tlogarytm podstawowy , który zostanie wykorzystany do zmniejszenia wielkości liczb, które porównujemy. Domyślnie bazuje, cgdy podany jest tylko jeden argument.

i **= j
y = l[l[g, b]] - d ** e + l[h] * i
z = l[l[a, f] * b ** c, g]

Te aktualizacje, i = i ** jponieważ inigdy się nie przyzwyczajają, ysą wynikiem b^c^d^e == g^h^i(^j)dwukrotnego logowania i przeniesienia wszystkiego na jedną stronę. Następnie niech z = l[a, f] * b ** cjako podstawa dziennika gbazy dziennika fz a ** b ** c.

if a == 1
    return p
elsif f == 1
    return 1

1^b^c^d^e = 1nigdy nie jest większy f^g^h^i^ji podobnie a^b^c^d^ejest zawsze większy niż 1^g^h^i^j = 1gdyby a != 1. Zauważ, że return pzwraca nil, co jest falsey, i return 1zwraca 1, co jest zgodne z prawdą.

elsif b == 1
    return z > h

Jeśli b == 1lub g == 1, następnie zmniejsza się w porównaniu a ** b ** cdo f ** g ** h, co odbywa się za pomocą dwóch rejestrów na obu stronach.

elsif d == 1 || c == 1
    return l[z, h] > i

Porównuje a ** b ** csię to f ** g ** h ** iprzez przestawienie go w log[log[b ** c * log[a, f], g], h]porównaniu do i. (Przypomnij sobie i **= jna początku i z = log[b ** c * log[a, f], g].)

elsif y == 0
    return a > f
else
    return y < 0
end

Porównuje to 4 najwyższe moce po dwukrotnym zalogowaniu obu stron. Jeśli są równe, porównuje bazę.

Po prostu piękna sztuka
źródło
5

Python 2, 671 612 495 490 611 597 bajtów

lambda a,b:P(S(a,b))>P(S(b,a))if P(a)==P(b)else P(a)>P(b)
def S(a,b):
  if a and a[-1]==b[-1]:
    a.pop()
    b.pop()
    return S(a,b)
from math import*
L=log
E=exp
N=lambda m,n,x:N(m,n+1,L(x))if x>=1else N(m,n-1,E(x))if x<0else(m+n,x)
A=lambda a,n,x:(0,1)if a==1else(1,R(x,n)*L(a))if a<1else N(2,*C(L(L(a)),x,n-1))if n else(1,x*L(a))
def C(c,x,n):
 if c*n==0:return(0if c else n,x+c)
 z=R(x,n-1)
 if z<=L(abs(c)):return(0,E(z)+c)
 return N(1,*C(L(1-E(L(-c)-z)if c<0else 1+E(L(c)-z)),x,n-1))
def R(x,n):
 try:exec'x=E(x)'*n
 except:x=float('inf')
 return x
P=lambda b:b and N(0,*A(b[0],*P(b[1:])))or(0,1)

-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śli P(a)i P(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ź:

n(xn):=expn(x)x[0,1)

a(xn)aapow

22220<2222(1/2)2222

Byłbym zainteresowany sugestiami dotyczącymi innych typów liczników, zwłaszcza liczb całkowitych.

Wydaje mi się, że aby problem był w P, potrzebujemy metod nienumerycznych. Wcale nie wydaje się mało prawdopodobne, że niektóre przypadki analityczne są trudniejsze niż P.

Przykłady:

powtow([2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2]) = (0.1184590219613409, 18)
powtow([9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9]) = (0.10111176550354063, 18)

powtow([2,2,5,2,7,4,9,3,7,6,9,9,9,9,3,2]) = (0.10111176550354042, 17)
powtow([3,3,6,3,9,4,2,3,2,2,2,2,2,3,3,3]) = (0.19648862015624008, 17)

Przykłady liczników:

powtow([2,2,2,2,2,2,2]) = (0.8639310719129168, 6)
powtow([3,2,2,2,2,2,2]) = (0.8639310719129168, 6)

W odniesieniu do licznika przykładów wspomina w sekcji komentarzy:

1<a<100

Dlatego najważniejszą rzeczą do udowodnienia jest to, że gdy głowa wieży przekroczy określony punkt, a reszta wykładników jest ograniczona (i równie liczna), możemy po prostu spojrzeć na najwyższą różną wartość. Jest to nieco sprzeczne z intuicją, ale wydaje się bardzo prawdopodobne z powodu prostych nierówności.

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)na P(S(a,b))>P(S(b,a))if P(a)==P(b)else P(a)>P(b)z funkcją rekurencyjną S(a,b). Jeśli P(a)i P(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 samo P(A)>P(B)sprawdzenie na tych teraz krótszych listach.

Kevin Cruijssen
źródło
1
Ssę
of Ignorance
1
495 bajtów
Neil
2
Nie powiedzie się za[10,10,10,10,10]>[9,10,10,10,10]
Embodiment of Ignorance
1
Używasz tej funkcji Rtylko raz, więc może po prostu ją wstawisz?
Embodiment of Ignorance
1
@EmbodimentofIgnorance Nadal istnieje zaległe połączenie z Rlinią 5 ...
Neil
4

05AB1E , 96 104 bajtów

3èI4èmU8.$`m©I7èI2è.n*I6èI1è.nI2è.n+Vнi0ë5èi1ë2ô1èßi¦2£`mIнI5è.n*I6è.nDI7èDi\1›·<žm*ë.n}®›ëXYQiнI5è›ëXY›

Port odpowiedzi Ruby @SimplyBeautifulArt , więc upewnij się, że go głosujesz!

log1(x)POSITIVE_INFINITYx>1NEGATIVE_INFINITYx<10.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:

3èI4èm         # Calculate d**e
      U        # And pop and store it in variable `X`
8.$`m          # Calculate i**j
     ©         # Store it in variable `®` (without popping)
I7èI2è.n       # Calculate c_log(h)
 *             # Multiply it with i**j that was still on the stack: i**j * c_log(h)
I6èI1è.nI2è.n  # Calculate c_log(b_log(g))
 +             # And sum them together: i**j * c_log(h) + c_log(b_log(g))
  V            # Pop and store the result in variable `Y`

нi             # If `a` is 1:
 0             #  Push 0 (falsey)
ë5èi           # Else-if `f` is 1:
 1             #  Push 1 (truthy)
ë2ô1èßi        # Else-if the lowest value of [c,d] is 1:
 ¦2£`m         #  Calculate b**c
 IнI5è.n       #  Calculate f_log(a)
  *            #  Multiply them together: b**c * f_log(a)
   I6è.n       #  Calculate g_log(^): g_log(b**c * f_log(a))
 D             #  Duplicate it
  I7è          #  Push h
     Di        #  Duplicate it as well, and if h is exactly 1:
       \       #   Discard the duplicated h
       1      #   Check if the calculated g_log(b**c * f_log(a)) is larger than 1
               #   (which results in 0 for falsey and 1 for truthy)
         ·<    #   Double it, and decrease it by 1 (it becomes -1 for falsey; 1 for truthy)
           žm* #   Multiply that by 9876543210 (to mimic POSITIVE/NEGATIVE INFINITY)
      ë        #  Else:
       .n      #   Calculate h_log(g_log(b**c * f_log(a))) instead
      }        #  After the if-else:
       ®›      #  Check whether the top of the stack is larger than variable `®`
ëXYQi          # Else-if variables `X` and `Y` are equal:
     нI5è›     #  Check whether `a` is larger than `f`
ë              # Else:
 XY           #  Check whether `X` is larger than `Y`
               # (after which the top of the stack is output implicitly as result)

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.

Kevin Cruijssen
źródło
1
Jestem pod wrażeniem, że ma mniej niż 100! I bardzo dziękuję za dodanie nagrody.
Anush
2
@Anush Mam wrażenie, że 96 jest dość długie, biorąc pod uwagę, że język nie golfowy Ruby ma 151.; p A np. O nagrodę. Dotyczy to głównie podejścia @SimplyBeautifulArt , ale jednocześnie zwraca uwagę na wyzwanie. Powodem tego jest to, że opublikowałeś go kilka godzin po swojej wcześniejszej odpowiedzi z 3 mocami. Osobiście podoba mi się to wyzwanie i jako pierwszy głosowałem za nim i odpowiadałem na nie, ale nadal mogę trochę zobaczyć prawdę w pierwszym komentarzu pod postem z wyzwaniem w tym samym czasie. Mamy nadzieję, że nagroda sprawi, że twoje wyzwanie będzie 0 lub pozytywne :)
Kevin Cruijssen
Marzę o zdobyciu 0! :)
Anush
1
[2,1,1,1,1,3,1,1,1,1,1] wynik 1 zamiast tego musi mieć wynik 0
RosLuP
1
log1(x)
3

C, 168 180 bajtów

Port C z odpowiedzi Kevina Cruijssena.

#define l(a,b)log(a)/log(b)
z(a,b,c,d,e,f,g,h,i,j){float t=pow(i,j),y=l(l(g,b),c)-pow(d,e)+l(h,c)*t,z=l(l(a,f)*pow(b,c),g);return~-a&&f<2|(b<2|g<2?z>h:c<2|d<2?l(z,h)>t:y?y<0:a>f);}

Wypróbuj online

Johan du Toit
źródło
2
Hmmm ... port w porcie * thonks *
Simply Beautiful Art
Nie odpowiada również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 ..
Kevin Cruijssen
2

APL (NARS), znaki 118, bajty 236

{p←{(a b c d)←⍵⋄a=1:¯1⋄b=1:⍟⍟a⋄(⍟⍟a)+(c*d)×⍟b}⋄(=/(a b)←{p 1↓⍵}¨⍺⍵)∧k←(∞ ∞)≡(m n)←{p(3↑⍵),*/3↓⍵}¨⍺⍵:(↑⍺)>↑⍵⋄k:a>b⋄m>n}

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

f(a,b,c,d,e)=a^b^c^d^e

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 ():

log(A*B)=log(A)+log(B)
log(A^B)=B*log(A)

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

s(a,b,c,d,e)=log(log(b))+log(c)*(d^e)={p 1↓⍵}

że nie do końca rozumiem, czy jest w porządku i nie bierze pod uwagę również parametru ... test:

  z←{p←{(a b c d)←⍵⋄a=1:¯1⋄b=1:⍟⍟a⋄(⍟⍟a)+(c*d)×⍟b}⋄(=/(a b)←{p 1↓⍵}¨⍺⍵)∧k←(∞ ∞)≡(m n)←{p(3↑⍵),*/3↓⍵}¨⍺⍵:(↑⍺)>↑⍵⋄k:a>b⋄m>n}
  10 10 10 10 10 z 10 10 10 10 9
1
  1 2 3 4 5 z 5 4 3 2 1
0
  2 2 2 2 3 z 10 4 3 2 2
1
  10 6 4 2 2 z 10 6 2 4 2
0
  2 2 2 2 10 z 2 2 2 10 2
1
  10 9 8 7 6 z 6 7 8 9 10
0
  10 10 10 10 10 z 10 10 10 10 9
1      
  2 2 2 2 3   z    10 4 3 2 2
1
  2 2 2 2 10   z   2 2 2 10 2
1
  10 10 10 10 10 z 9 10 10 10 10
1
  3 2 2 1 1   z    2 5 1 1 1
1
  2 2 3 10 1  z    2 7 3 9 1
1
  7 9 10 10 10 z   6 9 10 10 10
1
  3 2 2 2 2    z   2 2 2 2 2
1
  3 10 10 10 10 z  2 10 10 10 10
1
  8 3 1 2 1    z   2 2 3 1 1
1
  2 4 2 1 1    z   3 3 2 1 1
1
  5 4 3 2 1    z   1 2 3 4 5
1
  1 2 3 4 5    z   5 4 3 2 1
0
  6 7 8 9 10    z  6 7 8 9 10
0
  10 6 4 2 2 z     10 6 2 4 2
0
  10 9 8 7 6  z   6 7 8 9 10
0
  1 10 10 10 10 z 1 10 10 10 9
0
  2 4 1 1 1 z     2 2 2 1 1
0
  2 2 2 1 1    z  2 4 1 1 1
0
  2 5 1 1 1   z   3 2 2 1 1
0
  4 2 1 1 1   z   2 4 1 1 1
0
  2 4 1 1 1   z   4 2 1 1 1
0
  2 3 10 1 1  z   8 3 9 1 1
0
  8 3 9 1 1   z   2 3 10 1 1
0
  2 4 1 1 1   z   3 3 1 1 1
0
  2 2 1 9 9   z   2 2 1 10 10
0
  2 2 1 10 10 z   2 2 1 9 9
0
  1 1 1 1 1   z   1 2 1 1 1
0
  1 1 1 1 2   z   1 1 1 1 1
0
  1 1 1 1 1   z   1 1 1 1 1
0
  9 10 10 10 10 z  10 9 10 10 10
1
  9 10 10 10 10 z  10 10 10 10 10
0
  10 10 10 10 10 z  10 10 10 10 10
0
  11 10 10 10 10 z  10 10 10 10 10
1
RosLuP
źródło
W testach w opisie wyzwania brakuje niektórych przypadków skrajnych. Czy możesz sprawdzić, czy to działa również dla wszystkich tych przypadków testowych ?
Kevin Cruijssen
1
@KevinCruijssen Tutaj twój test, jeśli wykluczasz powyższy, wydaje się w porządku ...
RosLuP
1
Jeśli wszystkie przypadki testowe są poprawne, daj +1 ode mnie. Czekamy na wyjaśnienie Twojego kodu. :)
Kevin Cruijssen
1
Powiedziałeś, że obliczyłeś każdy, biorąc pod uwagę log(log()), ale dla tego przypadku testowego różnica pomiędzy log(log(10^10^10^10^10))i log(log(9^10^10^10^10))wymagałaby absurdalnej dokładności, aby się na niej zgodzić. Musisz mieć zmiennoprzecinkowy z 2e10dokładnością około 10 cyfr. I to ignoruje fakt, że obie strony są w przybliżeniu tak duże 10^10^10, co trudno mi uwierzyć, że potrafiłeś obliczyć.
Po prostu piękna sztuka
1
Być może zawodzi 9, 10, 10, 10, 10, 10, 9, 10, 10, 10, co powinno wrócić 1, ale s(9,10,10,10,10) < s(10,9,10,10,10).
Po prostu piękna sztuka
1

Java 8, 299 288 286 252 210 208 224 bajtów

Math M;(a,b,c,d,e,f,g,h,i,j)->{double t=M.pow(i,j),y=l(l(g,b),c)-M.pow(d,e)+l(h,c)*t,z=l(l(a,f)*M.pow(b,c),g);return a>1&&f<2|(b<2|g<2?z>h:c<2|d<2?l(z,h)>t:y==0?a>f:y<0);}double l(double...A){return M.log(A[0])/M.log(A[1]);}

Port 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:

Math M;                      // Math M=null on class-level to save bytes

(a,b,c,d,e,f,g,h,i,j)->{     // Method with ten integer parameters and boolean return-type
  double t=M.pow(i,j),       //  Temp `t` = `i` to the power `j`
    y=l(l(g,b),c)            //  Temp `y` = `c`_log(`b`_log(`g`))
      -M.pow(d,e)            //  - `d` to the power `e`
      +l(h,c)*t,             //  + `c`_log(`h`) * `t`
    z=l(l(a,f)*M.pow(b,c),g);//  Temp `z` = `g`_log(`f`_log(`a`) * `b` to the power `c`)
  return a>1&&               //  If `a` is 1:
                             //   Return false
   f<2|(                     //  Else-if `f` is 1:
                             //   Return true
    b<2|g<2?                 //  Else-if either `b` or `g` is 1:
     z>h                     //   Return whether `z` is larger than `h`
    :c<2|d<2?                //  Else-if either `c` or `d` is 1:
     l(z,h)>t                //    Return whether `h`_log(`z`) is larger than `t`
    :y==0?                   //   Else-if `y` is 0:
      a>f                    //    Return whether `a` is larger than `f`
    :                        //   Else:
     y<0);}                  //    Return whether `y` is negative

// Separated method to calculate `B`_log(`A`) for inputs `A,B`
double l(double...A){return M.log(A[0])/M.log(A[1]);}
Kevin Cruijssen
źródło
Wydaje się działać dobrze, jeśli używasz x==yzamiast M.abs(x-y)<1e-9.
Po prostu piękna sztuka
@SimplyBeautifulArt Czekaj, to robi? .. Wtf. Kiedy miałem moją wersję bez golfa, nie działała ona dla jednego przypadku testowego. Wyjściowy ciąg znaków był taki sam, ale wewnętrznie nieznacznie się różnił. Wersja bez golfa była twoją wersją bez golfa, zanim zmieniłem ją na trójskładnik golfowy, który masz również w swojej odpowiedzi Ruby. Głupia precyzja zmiennoprzecinkowa. Zmieni ją, ponieważ rzeczywiście działa w przypadkach testowych w obecnym podejściu. Dzięki.
Kevin Cruijssen
Lol, gdy jesteś przy nim, możesz spojrzeć na moje aktualizacje: ^)
Po prostu piękna sztuka
1
tmożna usunąć, aby zaoszczędzić jeden bajt, umieszczając go ytak jak ja. TIO
Simply Beautiful Art
1
@SimplyBeautifulArt Nvm o aktualizacji mojej odpowiedzi 05AB1E z tą samą zmianą. Liczba bajtów pozostanie 96.
Kevin Cruijssen