Diese Frage ist schwierig (und insbesondere schwieriger als Welche große Zahl ist größer? ) Für diejenigen, die anspruchsvollere Rätsel mögen.
Eingang
Ganzzahlen a1, a2, a3, a4, a5, b1, b2, b3, b4, b5 jeweils im Bereich von 1 bis 10.
Ausgabe
True if a1^(a2^(a3^(a4^a5))) > b1^(b2^(b3^(b4^b5))) and False otherwise.
^ ist Potenzierung in dieser Frage.
Regeln
Das ist Code-Golf. Ihr Code muss innerhalb von 10 Sekunden für jede gültige Eingabe in TIO korrekt beendet werden . Wenn Ihre Sprache nicht auf TIO ist, sollte der Code auf Ihrem Computer weniger als 10 Sekunden dauern.
Sie können alles Truthy for True und alles Falsey for False ausgeben.
Testfälle
Denken Sie daran, dass nach den Exponentiaon-Regeln 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
Neue Testfälle von Kevin Cruijssen
[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
quelle
quelle
Antworten:
Ruby, 150 Bytes
Siehe Revisionen für frühere Byteanzahlen.
-10 Bytes dank @ValueInk
+16 Bytes danke an @RosLuP für Fehler.
Probieren Sie es online aus .
Vergleichen Sie verschiedene Basiskräfte-Türme (von 'Höhe' fünf)?
Ungolfed Code:
Aufschlüsselung des Codes:
Dies ist der
t
Basislogarithmus, mit dem die Größe der zu vergleichenden Zahlen verringert wird. Der Standardwert ist base,c
wenn nur ein Argument angegeben wird.Dieses Update wird
i = i ** j
seitdemi
nie alleine verwendet undy
ist das Ergebnis einerb^c^d^e == g^h^i(^j)
zweimaligen Protokollierung und einer Verschiebung aller Elemente. Wir lassen dannz = l[a, f] * b ** c
als Logbasisg
die Logbasisf
vona ** b ** c
.1^b^c^d^e = 1
ist niemals größer alsf^g^h^i^j
und ebensoa^b^c^d^e
immer größer als1^g^h^i^j = 1
wenna != 1
. Beachten Sie, dassreturn p
Rückkehrnil
, was Falsey ist, undreturn 1
Rückkehr1
, was wahr ist.Wenn
b == 1
oderg == 1
, dann reduziert sich dies auf den Vergleicha ** b ** c
mitf ** g ** h
, was mit zwei Protokollen auf beiden Seiten erfolgt.Dies ist vergleichbar
a ** b ** c
mit einerf ** g ** h ** i
Neuanordnung imlog[log[b ** c * log[a, f], g], h]
Vergleich zui
. (Erinnern Sie sich darani **= j
am Anfang undz = log[b ** c * log[a, f], g]
.)Dies vergleicht die 4 höchsten Potenzen nach zweimaliger Protokollierung beider Seiten. Wenn sie gleich sind, wird die Basis verglichen.
quelle
Python 2,
671612495490611597 Bytes-59 Bytes dank @EmbodimentOfIgnorance
-117 Bytes dank @Neil
+121 Bytes für ungefähr fünf Fehlerkorrekturen, die alle von @ngn gefunden wurden
Nimmt die Eingaben als zwei Listen.
HINWEIS: Funktioniert auch mit größeren Listen oder Listen mit ungleicher Länge.EDIT: Nicht mehr wahr; Es funktioniert immer noch, wennP(a)
undP(b)
führt zu unterschiedlichen Tupeln, aber wenn sie gleich sind, funktioniert dieser aktualisierte Code oben nur mit Listen mit einer festen Größe von 5.Probieren Sie es online aus.
Erläuterung:
Golfversion dieser Antwort auf math.stackexchange.com , daher geht der gesamte Kredit an @ThomasAhle .
Um seine Antwort zu zitieren:
In Bezug auf die Gegenbeispiele erwähnt er im Kommentarbereich Folgendes:
Da Plan A und B für diese Herausforderung irrelevant sind, ist Plan C, da die Höhe für beide von uns eingegebenen Krafttürme 5 beträgt. Also habe ich geändert ,
P(a)>P(b)
umP(S(a,b))>P(S(b,a))if P(a)==P(b)else P(a)>P(b)
mit der rekursiven FunktionS(a,b)
. WennP(a)
undP(b)
zu demselben Tupel führen,P(S(a,b))>P(S(b,a))
werden zuerst nachfolgende Werte entfernt, die bei denselben Indizes gleich sind, bevorP(A)>P(B)
diese jetzt kürzeren Listen auf dieselbe Weise überprüft werden.quelle
[10,10,10,10,10]>[9,10,10,10,10]
R
einmal, also können Sie sie vielleicht einfach inline setzen?R
auf Linie 5 ...05AB1E ,
96104 BytesPort of @SimplyBeautifulArts Ruby-Antwort , also stellen Sie sicher, dass Sie ihn positiv bewerten!
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
Eingabe als Liste von zehn ganzen Zahlen :
[a,b,c,d,e,f,g,h,i,j]
.Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
Wenn jemand versuchen möchte, es weiter zu spielen, ist hier ein Hilfsprogramm, mit dem ich die richtigen Variablen aus der Eingabeliste abgerufen habe.
quelle
C
168180 BytesC Port von Kevin Cruijssens Antwort.
Probieren Sie es online aus
quelle
3,1,10,10,10,2,1,10,10,10
wie meine Java-Antwort auch. Und es ist tatsächlich eine Portierung von @ SimplyBeautifulArts Ruby-Antwort, da er derjenige ist, der sich allesAPL (NARS), Zeichen 118, Bytes 236
Die Funktion über dem Aufruf von z in "az w" würde 1 zurückgeben, wenn die Zahl in a größer als die Zahl in w ist, andernfalls würde sie 0 zurückgeben.
Wenn ich habe
Es ist f (aa)> f (bb) mit einem aa- und einem bb-Array von 5 positiven Zahlen, wenn und nur wenn (wenn a> 1 von aa und bb) log (log (f (aa)))> log ( log (f (bb))) muss man die log () Gesetze anwenden:
für Build v (aa) = log (log (aa)) = v (a, b, c, d, e) = log (log (a)) + log (b) (c ^ (d ^ e)) = {p (3 ↑ ⍵), / 3 ↓ ⍵} Funktion und so wird die Übung gefunden, wenn v (aa)> v (bb).
Aber es gibt einen Fall, in dem v (aa) und v (bb) beide unendlich sind (APL hat den Float-Raum beendet). In diesem Fall würde ich die unsichere Funktion verwenden
dass ich nicht ganz verstehe, ob es in Ordnung ist und es auch keinen Parameter berücksichtigt ... test:
quelle
log(log())
, aber für diesen Testfall würde der Unterschied zwischenlog(log(10^10^10^10^10))
undlog(log(9^10^10^10^10))
eine absurde Menge an Genauigkeit erfordern, um ihn zu erfassen. Sie benötigen einen Gleitkommawert mit2e10
einer Genauigkeit von etwa 10 Stellen. Und dies ignoriert die Tatsache, dass beide Seiten ungefähr so groß sind wie10^10^10
, was ich kaum glauben kann, dass Sie in der Lage waren zu berechnen.9, 10, 10, 10, 10, 10, 9, 10, 10, 10
, was zurückgeben sollte1
, abers(9,10,10,10,10) < s(10,9,10,10,10)
.Java 8,
299288286252210208224 BytesPort of @SimplyBeautifulArts Ruby-Antwort , also stellen Sie sicher, dass Sie ihn positiv bewerten!
-14 Bytes dank @SimplyBeautifulArt .
+17 Bytes für die gleichen Fehlerbehebungen wie die Ruby-Antwort.
Probieren Sie es online aus.
Erläuterung:
quelle
x==y
anstelle von verwendenM.abs(x-y)<1e-9
.t
Es kann entfernt werden, um ein Byte zu speichern, indem esy
wie ich eingefügt wird. TIO