Welche große Zahl ist größer?

22

Eingang

Ganzzahlen a1, a2, a3, b1, b2, b3 jeweils im Bereich von 1 bis 20.

Ausgabe

True if a1^(a2^a3) > b1^(b2^b3) and False otherwise.

^ ist Potenzierung in dieser Frage.

Regeln

Das ist Code-Golf. Ihr Code muss innerhalb von 10 Sekunden korrekt terminiert sein, damit eine gültige Eingabe auf einem Standard-Desktop-PC möglich ist.

Sie können Truthy für True und Falsey für False ausgeben.

Sie können eine beliebige Eingabereihenfolge annehmen, solange sie in der Antwort angegeben ist und immer dieselbe.

Für diese Frage sollte Ihr Code immer korrekt sein. Das heißt, es sollte nicht an Gleitkommaungenauigkeiten scheitern. Aufgrund des begrenzten Eingangsbereichs sollte dies nicht zu schwer zu erreichen sein.

Testfälle

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
Anush
quelle
Kommentare sind nicht für eine längere Diskussion gedacht. Diese Unterhaltung wurde in den Chat verschoben .
DJMcMayhem

Antworten:

16

Perl 6 , 31 29 Bytes

-2 Bytes dank Grimy

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

Probieren Sie es online!

Ob Sie es glauben oder nicht, dies ist kein Esolang, auch wenn er hauptsächlich aus Sternchen besteht. Dies verwendet die Arnauld-Formel mit log10 anstelle von ln.

Scherzen
quelle
Ich glaube das scheitert für 2^3^12 == 8^3^11.
Ørjan Johansen
@ ØrjanJohansen Das sollte jetzt behoben sein. Lassen Sie mich wissen, wenn es für etwas anderes fehlschlägt
Jo King
@ Grimy Danke! Ich hätte schwören können, dass ich es versucht habe ...
Jo King
7

R , 39 Bytes

function(x,y,z)rank(log2(x)*(y^z))[1]<2

Probieren Sie es online!

Liefert FALSE when a > bund TRUE ifb < a

digEmAll
quelle
4
Dies ist falsch fürf(2,2,20,2,20,2)
H.PWiz
Behoben, unter Verwendung Ihres Vorschlags zu @Arnauld Antwort;)
digEmAll
Ich glaube das scheitert für 2^3^12 == 8^3^11.
Ørjan Johansen
1
Scheitert für beide 1^20^20 == 1^1^1und 1^1^1 == 1^20^20.
Olivier Grégoire
6

05AB1E , 11 9 11 7 Bytes

.²Šm*`›

Port of @Arnauld 's JavaScript und @digEmAll ' s R nähert sich (ich sah sie die gleiche Zeit schreiben um)
-2 Bytes dank @Emigna
+2 Bytes als Bug-Fix nach @Arnauld 's und @digEmAll ' s Antworten enthalten ein Fehler
-4 Bytes jetzt, da nach @LuisMendos Kommentaren eine andere Eingabereihenfolge zulässig ist

Input wie [a1,b1], [a3,b3], [a2,b2]als drei getrennte Eingänge.

Probieren Sie es online aus oder überprüfen Sie alle Testfälle .

Erläuterung:

       # 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)
Kevin Cruijssen
quelle
1
Ihre
Emigna
@Emigna Ah schön, ich habe mir einen Ansatz mit angeschaut ć, aber komplett vergessen zu benutzen š(nicht sicher warum jetzt, wo ich es sehe, haha). Vielen Dank!
Kevin Cruijssen
Dies scheint falsch zu sein (da die Antwort von Arnauld bis zum letzten Update falsch war).
Anush
@Anush Fixed und 4 Bytes gespart, indem die Eingaben jetzt in einer anderen Reihenfolge vorgenommen werden. :)
Kevin Cruijssen
4

Wolfram Language (Mathematica) , 23 Byte

#2^#3Log@#>#5^#6Log@#4&

Probieren Sie es online!

J42161217
quelle
Dies endet nicht für a1 = 20, a2 = 20, a3 = 20.
Anush
@Anush behoben ...
J42161217
1
Schade um Überlauf, sonst sind ##>0&@@(##^1&@@@#)&es nur 19 Bytes und sogar noch umwerfender un-mathematica-artig als der obige Code. (Infput-Format {{a,b,c},{d,e,f}})
Greg Martin
3

J , 11 9 Bytes

>&(^.@^/)

Probieren Sie es online!

Argumente als Listen angegeben.

  • > Ist der linke größer?
  • &(...) Aber zuerst transformiere jedes Argument so:
  • ^.@^/reduzieren Sie es von rechts nach links mit Exponential. Da die gewöhnliche Potenzierung den Fehler auch bei erweiterten Zahlen einschränkt, nehmen wir die Protokolle beider Seiten
Jona
quelle
3

Sauber , 44 Bytes

import StdEnv
$a b c d e f=b^c/e^f>ln d/ln a

Probieren Sie es online!

Verwendet eine Anpassung der Arnauldschen Formel.

Οurous
quelle
1
Ich glaube das scheitert für 2^3^12 == 8^3^11.
Ørjan Johansen
@ ØrjanJohansen Behoben.
Οurous
3

Python 3 , 68 Bytes

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

Probieren Sie es online!

Port von @Arnualds antwortet, aber die Basis für das Protokoll wurde geändert.

Artemis unterstützt Monica
quelle
^heißt **in Python. Und wenn dies geändert wird, können Sie nicht alle Testfälle des OP ausführen.
Ørjan Johansen
Sollte jetzt alle behoben sein, aber 66 Bytes.
Artemis unterstützt Monica
Ich glaube das scheitert für 2^3^12 == 8^3^11.
Ørjan Johansen
@ ØrjanJohansen sollte repariert werden
Artemis unterstützt Monica
Scheint so. Abgesehen von der Änderung der logarithmischen Basis für den Fix sieht dies nach Arnauld aus.
Ørjan Johansen
2

05AB1E , 13 Bytes

Verwendet die Methode aus Arnauld's JS-Antwort

2F.²IIm*ˆ}¯`›

Probieren Sie es online!

Emigna
quelle
Dies endet nicht für a1 = 20, a2 = 20, a3 = 20.
Anush
1
@Anush: Scheint für mich in weniger als einer Sekunde zu enden .
Emigna
Sie haben alle die Variablen 20. Siehe einstellen tio.run/##yy9OTMpM/f9f79Du3GK9Q6tzHzXs@v8/2shAB4xiuRBMAA
Anush
@Anush: Ah, du meintest b1=b2=b3=20, ja, das hört nicht auf.
Emigna
1
@Anush: Es ist jetzt behoben. Vielen Dank für den Hinweis auf meinen Fehler :)
Emigna
2

Excel, 28 Bytes

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

Excel-Implementierung der gleichen Formel bereits verwendet.

Wernisch
quelle
Nach meinem Verständnis hat Excel eine Genauigkeit von 15 Stellen. Daher kann es vorkommen, dass durch Rundungen die falsche Antwort zurückgegeben wird.
Kumulierung
2

JavaScript, 51 Bytes

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

Überraschenderweise zeigen die Testfälle keinen Gleitkommafehler. Ich weiß nicht, ob es jemals bei dieser Größe funktioniert.

Dies vergleicht nur den Logarithmus der Zahlen.

Gleichheitstoleranz ist gleich 1e-8.

Naruyoko
quelle
Willkommen bei PPCG! Leider schlägt dies bei meinem 2^3^12 == 8^3^11Testfall fehl . Tatsächlich ist Ihre Antwort der ursprünglichen Antwort von Arnauld sehr ähnlich (leider nicht korrigiert, sondern gelöscht), die die meisten derjenigen inspiriert hat, die sie nicht bestanden haben.
Ørjan Johansen
@ Ørjan Johansen Nach l(h)rechts verschoben , und vielleicht funktioniert es jetzt? Bearbeiten: Warten Sie, tut es nicht.
Naruyoko
Gleichheitstoleranz hinzugefügt 0.01.
Naruyoko
Ich habe schnell gesucht und eine Toleranz sollte funktionieren, aber das ist ein bisschen zu hoch. Das Höchste, das Sie ausschließen müssen, ist (5.820766091346741e-11,(8.0,3.0,11,2.0,3.0,12))(mein Testfall), und das Niedrigste, das Sie einschließen müssen, ist (9.486076692724055e-4,(17.0,19.0,1,3.0,7.0,2))( 3^7^2 > 17^19^1.) So etwas 1e-8sollte sicher in der Mitte sein und dieselbe Bytelänge haben.
Ørjan Johansen
@ Ørjan Johansen Ok, danke!
Naruyoko
1

bc -l, 47 Bytes

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

Wenn die Eingabe von gelesen wird STDIN, eine Ganzzahl pro Zeile.

bcist ziemlich schnell; Auf meinem Laptop funktioniert a = b = c = d = e = f = 1,000,000 in etwas mehr als einer Sekunde.


quelle
Ich liebe eine Antwort bc!
Brauche
1

C ++ (gcc) , 86 Bytes

Vielen Dank an @ ØrjanJohansen für den Hinweis auf einen Fehler und an @Ourous für die Behebung.

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

Probieren Sie es online!

abc>def

Neil A.
quelle
Die Formel nach logzweimaliger Einnahme sollte lauten i[2]*log(i[1])+log(log(*i)). ZB wird die aktuelle fehlschlagen 2^2^20 > 4^2^18.
Ørjan Johansen
@ ØrjanJohansen: guter Fang! powDann muss ich wohl die Methode anwenden.
Neil A.
Die Alternative hat das 2^3^12 == 8^3^11Problem, auf das ich andere hingewiesen habe.
Ørjan Johansen
@ ØrjanJohansen: na ja, dann verwende ich wohl deine feste Formel.
Neil A.
Oh, ich fürchte, diese Formel ist nur mathematisch korrekt. Es gibt immer noch ein Gleitkomma-Fehlerproblem, nur mit einem anderen Fall 2^3^20 == 8^3^19. Tatsächlich scheitert die Potenzmethode im Durchschnitt für weniger, wahrscheinlich, weil sie dazu neigt, genau mit Zweierpotenzen zu multiplizieren. Andere haben es geschafft, dass es funktioniert, indem sie es nur leicht verändert haben.
Ørjan Johansen
1

Gelee , 8 Bytes

l⁵×*/}>/

Probieren Sie es online!

Basierend auf Arnauld's JS Antwort . Erwartet als Eingabe [a1, b1]als linkes Argument und [[a2, b2], [a3, b3]]als rechtes Argument.

Jetzt wurde geändert, dass log auf die Basis 10 angewendet wird, die alle möglichen Eingaben im angegebenen Bereich soweit korrekt verarbeitet. Vielen Dank an Ørjan Johansen, der das ursprüngliche Problem gefunden hat!

Nick Kennedy
quelle
1
Ich glaube das scheitert für 2^3^12 == 8^3^11.
Ørjan Johansen
Dein Python TIO ist falsch .. Du hast 8*statt 8**. @ ØrjanJohansen ist ja richtig, das 2**(3**12) > 8**(3**11)ist falsch, da sie gleich sind.
Kevin Cruijssen
@ KevinCruijssen oops. Ja, sie sind in der Tat gleich. Der Grund, warum die beiden ursprünglichen als unterschiedlich markiert sind, hängt mit dem Gleitkommafehler zusammen.
Nick Kennedy
1

TI-BASIC, 27 31 Bytes

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

6Ans

Beispiele:

{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

Erläuterung:

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"

Hinweis: TI-BASIC ist eine Token-Sprache. Die Anzahl der Zeichen entspricht nicht der Anzahl der Bytes.

Tau
quelle
Ich bin nicht so vertraut mit TI-BASIC, aber dies scheint log(x) × y × zeher als log(x) × y ^ z. Dies führt nicht unbedingt zur gleichen Reihenfolge wie die ursprüngliche Ungleichung.
Nick Kennedy
@ NickKennedy Ja, da hast du recht! Ich werde den Beitrag aktualisieren, um dies zu berücksichtigen.
Tau
1

APL (NARS), Zeichen 36, Bytes 72

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

Hier unten würde die Funktion z in (abc) z (xyt) 1 zurückgeben, wenn a ^ (b ^ c)> x ^ (y ^ t) else 0 zurückgeben würde; Prüfung

  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} ist die Funktion p (a, b, c) = log (log (a)) + c * log (b ) = log (log (a ^ b ^ c)) und wenn aa = a ^ (b ^ c) mit a, b, c> 0 und a> 1 bb = x ^ (y ^ t) mit x, y, t> 0 und x> 1 als

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

Es gibt ein Problem mit der Funktion p: Wenn a 1 ist, existiert das Protokoll log 1 nicht, so dass ich es mit der Zahl -1 darstelle; Wenn a = 2, ist log log a eine negative Zahl, aber> -1.

PS. Gesehen die Funktion in seiner größeren Menge, in der definiert ist

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

Der Bereich für a, b, c in 1..20 ist zu gering ... Wenn man sieht, wenn es mit der Log-Basis 10 überläuft, könnte der Bereich für a, b, c für 64-Bit 1..10000000 oder größer sein Schwimmertyp.

RosLuP
quelle