Cette question est délicate (et en particulier plus difficile que Quel grand nombre est le plus grand? ), Pour ceux qui aiment les puzzles plus difficiles.
Contribution
Entiers a1, a2, a3, a4, a5, b1, b2, b3, b4, b5 chacun dans la plage de 1 à 10.
Production
True if a1^(a2^(a3^(a4^a5))) > b1^(b2^(b3^(b4^b5))) and False otherwise.
^ est l'exponentiation dans cette question.
Règles
C'est du code-golf. Votre code doit se terminer correctement dans les 10 secondes pour toute entrée valide sur TIO . Si votre langue n'est pas sur TIO, le code devrait se terminer sous 10 secondes sur votre machine.
Vous pouvez générer tout ce qui est vrai pour vrai et tout ce qui est faux pour faux.
Cas de test
Rappelons que selon les règles d'exponentiaon, 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
Nouveaux cas de test de 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
Réponses:
Rubis, 150 octets
Voir les révisions pour les décomptes précédents.
-10 octets grâce à @ValueInk
+16 octets grâce à @RosLuP pour les bugs.
Essayez-le en ligne .
Comparer différentes puissances de base (cinq tours de «hauteur»)?
Code non golfé:
Répartition du code:
Il s'agit du
t
logarithme de base , qui sera utilisé pour réduire la taille des nombres que nous comparons. Il prend par défaut la basec
lorsqu'un seul argument est donné.Cette mise à jour
i = i ** j
cari
jamais utilisée seule,y
est le résultat de la journalisationb^c^d^e == g^h^i(^j)
deux fois et de tout déplacer d'un côté. On laisse alorsz = l[a, f] * b ** c
comme baseg
de log la basef
de log dea ** b ** c
.1^b^c^d^e = 1
n'est jamais supérieur àf^g^h^i^j
, et de même,a^b^c^d^e
est toujours supérieur à1^g^h^i^j = 1
ifa != 1
. Notez quereturn p
revientnil
, ce qui est falsey, etreturn 1
revient1
, ce qui est vrai.Si
b == 1
oug == 1
, cela revient à comparera ** b ** c
àf ** g ** h
, ce qui se fait avec deux journaux des deux côtés.Cela se compare
a ** b ** c
àf ** g ** h ** i
en le réorganisant parlog[log[b ** c * log[a, f], g], h]
rapport ài
. (Rappelez-vous qu'aui **= j
début etz = log[b ** c * log[a, f], g]
.)Cela compare les 4 puissances les plus élevées après avoir enregistré les deux côtés deux fois. S'ils sont égaux, il compare la base.
la source
Python 2,
671612495490611597 octets-59 octets grâce à @EmbodimentOfIgnorance
-117 octets grâce à @Neil
+121 octets pour environ cinq corrections de bugs, tous trouvés par @ngn
Prend les entrées sous forme de deux listes.
REMARQUE: fonctionne également avec des listes plus grandes ou de longueur inégale.EDIT: n'est plus vrai; cela fonctionne toujours siP(a)
etP(b)
aboutit à des tuples différents, mais s'ils sont identiques, ce code mis à jour ci-dessus ne fonctionne qu'avec des listes avec une taille fixe de 5 maintenant.Essayez-le en ligne.
Explication:
Version golfée de cette réponse sur math.stackexchange.com , donc tout le mérite revient à @ThomasAhle .
Pour citer sa réponse:
Concernant les contre-exemples, il mentionne ce qui suit dans la section commentaire:
Étant donné que les plans A et B ne sont pas pertinents dans ce défi, puisque la hauteur est de 5 pour les deux tours de puissance que nous avons saisies, le plan C l'est. J'ai donc changé
P(a)>P(b)
pourP(S(a,b))>P(S(b,a))if P(a)==P(b)else P(a)>P(b)
avec la fonction récursiveS(a,b)
. SiP(a)
etP(b)
aboutissent au même tuple, leP(S(a,b))>P(S(b,a))
supprimera d'abord les valeurs de fin qui sont égales aux mêmes indices, avant de faire la mêmeP(A)>P(B)
vérification sur ces listes désormais plus courtes.la source
[10,10,10,10,10]>[9,10,10,10,10]
R
qu'une seule fois, alors peut-être pouvez-vous simplement l'intégrer?R
ligne 5 ...05AB1E ,
96104 octetsPort de la réponse Ruby de @SimplyBeautifulArt , alors assurez-vous de lui donner un vote positif!
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
Entrée comme une liste d'entiers dix:
[a,b,c,d,e,f,g,h,i,j]
.Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
Si quelqu'un veut essayer de jouer au golf plus loin, voici un programme d'aide que j'ai utilisé pour obtenir les variables correctes de la liste d'entrée.
la source
C,
168180 octetsPort C de la réponse de Kevin Cruijssen.
Essayez-le en ligne
la source
3,1,10,10,10,2,1,10,10,10
comme ma réponse Java. Et c'est en fait un portage de la réponse Ruby de @ SimplyBeautifulArt, car c'est lui qui a tout inventé et corrigé les bugs ..APL (NARS), caractères 118, octets 236
La fonction au-dessus de l'appel z, dans "az w" retournerait 1 si le nombre dans a est supérieur au nombre dans w, sinon elle retournerait 0.
Si j'ai
Ce sera f (aa)> f (bb) avec à la fois un tableau aa et bb de 5 nombres positifs si et seulement si (si a> 1 de aa et bb) log (log (f (aa)))> log ( log (f (bb))) il faut utiliser les lois log ():
pour build v (aa) = log (log (aa)) = v (a, b, c, d, e) = log (log (a)) + log (b) (c ^ (d ^ e)) = {p (3 ↑ ⍵), / 3 ↓ ⍵} et donc l'exercice est trouvé lorsque v (aa)> v (bb).
Mais il y a un cas où v (aa) et v (bb) sont tous les deux infinis (APL a mis fin à l'espace flottant) dans ce cas, j'utiliserais la fonction non sécurisée
que je ne comprends pas bien si c'est ok et ça ne prend pas en compte un paramètre aussi ... test:
la source
log(log())
, mais pour ce cas de test, la différence entrelog(log(10^10^10^10^10))
etlog(log(9^10^10^10^10))
nécessiterait une précision absurde pour être prise en compte. Vous auriez besoin d'avoir une virgule flottante avec environ2e10
10 chiffres de base de précision. Et cela ignore le fait que les deux côtés sont à peu près aussi grands que10^10^10
, ce que j'ai du mal à croire que vous avez pu calculer.9, 10, 10, 10, 10, 10, 9, 10, 10, 10
, ce qui devrait revenir1
, maiss(9,10,10,10,10) < s(10,9,10,10,10)
.Java 8,
299288286252210208224 octetsPort de la réponse Ruby de @SimplyBeautifulArt , alors assurez-vous de lui donner un vote positif!
-14 octets grâce à @SimplyBeautifulArt .
+17 octets pour les mêmes corrections de bugs que la réponse Ruby.
Essayez-le en ligne.
Explication:
la source
x==y
au lieu deM.abs(x-y)<1e-9
.t
Il peut être supprimé pour économiser un octet en le mettanty
comme je l'ai fait. TIO