Votre but est d'écrire un programme qui imprime un nombre. Plus le nombre est élevé, plus vous obtiendrez de points. Mais fais attention! La longueur du code est à la fois limitée et fortement pondérée dans la fonction de notation. Votre numéro imprimé sera divisé par le cube du nombre d'octets que vous avez utilisés pour votre solution .
Alors, disons que vous avez imprimé 10000000
et que votre code est 100
long en octets. Votre score final sera 10000000 / 100^3 = 10
.
Il y a d'autres règles à suivre pour rendre ce défi un peu plus difficile.
- Vous ne pouvez pas utiliser de chiffres dans votre code (0123456789);
- Vous pouvez utiliser mathématique / physique / etc. constantes, mais seulement si elles sont inférieures à 10. (par exemple, vous pouvez utiliser Pi ~ = 3.14 mais vous ne pouvez pas utiliser la constante d'Avogadro = 6e23)
- La récursivité est autorisée, mais le nombre généré doit être fini (l' infini n'est donc pas accepté comme solution. Votre programme doit se terminer correctement, en supposant du temps et de la mémoire illimités, et générer le résultat demandé);
- Vous ne pouvez pas utiliser les opérations
*
(multiplier),/
(diviser),^
(puissance) ni aucun autre moyen de les indiquer (par exemple, ce2 div 2
n'est pas autorisé); - Votre programme peut générer plusieurs nombres, si vous en avez besoin . Seul le plus élevé comptera pour marquer;
- Cependant, vous pouvez concaténer des chaînes: cela signifie que toute séquence de chiffres adjacents sera considérée comme un nombre unique;
- Votre code sera exécuté tel quel. Cela signifie que l'utilisateur final ne peut éditer aucune ligne de code, ni saisir un nombre, ni rien d'autre.
- La longueur maximale du code est de 100 octets.
Classement
- Steven H. , Pyth ≈ f φ (1,0,0) +7 (256 26 ) / 1000000 [1]
- Simplement Beau Art , Ruby de f de φ 121 (ω) (126) [1]
- Peter Taylor , GolfScript ( f ε 0 + + 1 (17) / 1000 [1]
- res , GolfScript ≈ f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (126))))))))) [1]
- Simply Beautiful Art , Ruby ≈ f w © 2 + 1 (1983)
- eaglgenes101 , Julia ≈ f ω3 (127)
- col6y , Python 3, (127 → 126 → ... → 2 → 1) / 99 3 [1] [3]
- Toeofdoom , Haskell, ≈ un 20 (1) / 99 3 [1]
- Fraxtil , dc, 15 ↑ ¹⁶⁶⁶⁶⁶⁵ 15/100 3 [3]
- Magenta , Python, Ack (126,126) / 100 3 ≈ 10 ↑ 124 129
- Kendall Frey , ECMAScript 6, 10 ≈ 3 ↑ 4 3 /100 3 [1]
- Ilmari Karonen , GolfScript, 10 ≈ ↑ 3 10 377 /18 3 [1]
- BlackCap , Haskell, 10 ↑↑ 65503/100 3
- récursif , Python, 2 ↑↑ 11/95 3 10 ↑↑ 8.63297 [1] [3]
- nm , Haskell, 2 ↑↑ 7/100 3 10 ↑↑ 4.63297 [1]
- David Yaw , C, ≈ 10 10 4 x 10 vingt-deux / 83 3 ≈ 10 ↑↑ 4,11821 [2]
- Primo , Perl, 10 ≈ (12750684161!) 5 x 2 27 /100 3 ≈ 10 ↑↑ 4,11369
- Art , C, ≈ 10 10 2 x 10 6 /98 3 ≈ 10 ↑↑ 3,80587
- Robert Sørlie , x86, 10 2 2 19 +32 / 100 3 10 ↑ ^ 3.71585
- Tobia , APL, ≈ 10 10 353 /100 3 ≈ 10 ↑↑ 3,40616
- Darren Stone , C, 10 10 10 97,61735 / 98 3 ≈ 10 ↑ ^ 3.29875
- ecksemmess , C, 10 ≈ 2 320 /100 3 ≈ 10 ↑↑ 3,29749
- Adam Speight , vb.net, ≈ 10 5000 × (2 64 ) quatre / 100 3 ≈ 10 ↑↑ 3,28039
- Joshua , bash, ≈ 10 10 15 /86 3 ≈ 10 ↑↑ 3,07282
Notes de bas de page
- Si chaque électron de l’univers était un qubit et que chaque superposition de celui-ci pouvait être utilisée à bon escient pour stocker des informations (qui, tant que vous n’avez pas réellement besoin de savoir ce qui est stocké est théoriquement possible), ce programme nécessite plus de mémoire que de ressources existe peut-être, et ne peut donc pas être exécuté - maintenant, ou à tout moment imaginable dans le futur. Si l'auteur avait l'intention d'imprimer une valeur supérieure à 3 ↑↑ 3.28 en une fois, cette condition s'applique.
- Ce programme nécessite plus de mémoire qu’il n’existe actuellement, mais pas tant qu’il ne pourrait théoriquement pas être stocké sur un nombre restreint de qubits; il peut donc exister un jour un ordinateur capable d’exécuter ce programme.
- Tous les interprètes actuellement disponibles génèrent une erreur d'exécution ou le programme ne s'exécute pas autrement, comme le prévu l'auteur.
- L'exécution de ce programme causera des dommages irréparables à votre système.
Edit @primo : J'ai mis à jour une partie du tableau de bord en utilisant une notation plus facile à espérer, avec des décimales pour indiquer la distance logarithmique à la puissance immédiatement supérieure. Par exemple 10 ↑↑ 2.5 = 10 10 √10 . J'ai également modifié certains scores si je croyais que l'analyse de l'utilisateur était erronée, n'hésitez pas à en discuter.
Explication de cette notation:
Si 0 ≤ b < 1
, alors .a↑↑b = ab
Si b ≥ 1
, alors .a↑↑b = aa↑↑(b-1)
Si b < 0
, alors .a↑↑b = loga(a↑↑(b+1))
12e10
(12 * 10 ^ 10)12*10^10
?500b
, est-ce invalide? Autrement dit, pouvons-nous ignorer toutes les choses non numériques imprimées par un programme? Et si oui, est-ce que quelque chose comme50r7
compterait507
?Réponses:
GolfScript; marquer au moins f ε_0 + ω + 1 (17) / 1000
Suite à la suggestion de res d’utiliser la réponse d’un ver à cette question, je présente deux programmes qui améliorent considérablement son utilisation de la solution de Howard.
Ils partagent un préfixe commun, modulo le nom de la fonction:
calcule
g(g(1)) = g(5)
oùg(x) = worm_lifetime(x, [x])
croît approximativement comme f ε 0 (ce qui correspond à "la fonction dans la hiérarchie en croissance rapide qui croît à peu près au même rythme que la fonction de Goodstein").Le peu plus facile (!) À analyser est
.{foo}*
cartesx
àfoo^x x
.donne ainsi
g^(g(5)) ( g(5) )
; les 8 autres niveaux d'itération sont similaires à l'enchaînement des flèches. Pour exprimer en termes simples: sih_0 = g
eth_{i+1} (x) = h_i^x (x)
puis nous calculonsh_10 (g(5))
.Je pense que ce deuxième programme a presque certainement des résultats bien meilleurs. Cette fois, le label assigné à function
g
est une nouvelle ligne (sic).Cette fois, je fais un meilleur usage en
^
tant que fonction différente.prend
x
la pile, et laissex
suivi d'une chaîne contenant desx
copies de.{
suivi deg
suivi dex
copies de}*
; il évalue ensuite la chaîne. Comme j'avais un meilleur endroit pour graver des caractères de rechange, nous commençons parj_0 = g
; sij_{i+1} (x) = j_i^x (x)
ensuite la première évaluation des^
calculsj_{g(5)} (g(5))
(dont je suis sûr qu'elle bat déjà le programme précédent). J'exécute ensuite^
16 autres fois; donc sik_0 = g(5)
etk_{i+1} = j_{k_i} (k_i)
puis il calculek_17
. Je suis reconnaissant (encore) d’avoir estimé quek_i
>> f ε_0 + + 1 (i).la source
.{foo}*
cartesx
àfoo^x (x)
. Si nous prenonsh_0 (x) = g^4 (x)
eth_{i+1} (x) = h_i^x (x)
alors la valeur calculée esth_9 (g(3))
. Votref(x) = g^(4x) (x) = h_0^x (x) = h_1 (x)
.*
fonctionne le logiciel. Il est prudent de dire que h_0 (x) = g ^ 4 (x) >> f_eps_0 (x); par conséquent, la relation h_ {i + 1} (x) = h_i ^ x (x) définit effectivement une hiérarchie à croissance rapide "accélérée" telle que h_i (x) >> f_ (eps_0 + i) (x). Le nombre calculé h_9 (g (3)) est certainement beaucoup plus grand que f_ (eps_0 + 9) (g (3)). En ce qui concerne g (3), je pense pouvoir montrer qu’il est supérieur à g_4, le quatrième nombre de la séquence g_i utilisé pour définir le nombre de Graham (qui est g_64).j_i ~ f_{eps_0 + i}
; ça faitk_i ~ f_{eps_0 + i omega + i^2}
?k_i ~ f_{ε_0 + ω}^i (k_0)
. Voici le raisonnement: k_ {i + 1} = j_ {k_i} (k_i) = j_ω (k_i) ~ f_ {ε_0 + ω} (k_i) ~ f_ {ε_0 + ω} ^ 2 (k_ {i-1}) ... ~ f_ {ε_0 + ω} ^ {i + 1} (k_0), donc k_i ~ f_ {ε_0 + ω} ^ i (k_0). Une borne basse très conservatrice sur k_i, entièrement en termes de hiérarchie en croissance rapide, est alorsk_i >> f_{ε_0 + ω}^i (i) = f_{ε_0 + ω + 1} (i)
.Windows 2000 - Windows 8 (3907172 / 23³ = 321)
NOTE: NE PAS F'ING COURIR CETTE!
Enregistrez les éléments suivants dans un fichier de commandes et exécutez-le en tant qu'administrateur.
Sortie lorsqu’il est exécuté sur un lecteur de 4 To avec le premier numéro imprimé en gras.
la source
Your printed number will be divided for the number of bytes you used for your solution^3.
GolfScript, score: façon trop
OK, quel nombre peut-on imprimer avec quelques caractères de GolfScript?
Commençons par le code suivant ( merci, Ben! ), Qui affiche
126
:Ensuite, répétons-le 126 fois, nous donnant un nombre égal à environ 1,26126 × 10 377 :
(C'est la répétition de chaîne, pas la multiplication, donc ça devrait aller selon les règles.)
Maintenant, répétons ce nombre à 378 chiffres un peu plus de 10 377 fois:
Vous ne verrez jamais ce programme se terminer car il essaie de calculer un nombre d'environ 10 380 × 2 1140 chiffres. Aucun ordinateur jamais construit ne pourrait stocker un nombre aussi grand, et un tel ordinateur ne pourrait jamais être construit en utilisant la physique connue; le nombre d'atomes dans l'univers observable est estimé à environ 10 80 , même si nous pouvions utiliser toute la matière dans l'univers pour stocker ce grand nombre, nous aurions toujours en quelque sorte à entasser environ 10 380 /10 80 = 10 300 chiffres dans chaque atome!
Mais supposons que nous ayons l'interprète GolfScript de Dieu, capable de faire un tel calcul, et que nous ne soyons toujours pas satisfaits. OK, refaisons ça!
La sortie de ce programme, si elle pouvait se terminer, aurait environ 10 10 383 chiffres, ce qui équivaudrait à environ 10 10 383 .
Mais attendez! Ce programme devient un peu répétitif ... pourquoi ne le transformons-nous pas en boucle?
Ici, le corps de la boucle est parcouru environ 10 377 fois, ce qui nous donne une sortie théorique composée d'environ 10 10⋰ 10 377 chiffres environ, où la tour de puissances itérées de 10 mesure environ 10 377 pas. (En fait, c'est une sous-estimation flagrante, car je néglige le fait que le nombre de répétitions s'allonge également à chaque fois, mais relativement parlant, il s'agit d'un problème mineur.)
Mais nous n'avons pas encore fini. Ajoutons une autre boucle!
Même écrire correctement une approximation de tels nombres nécessite une notation mathématique ésotérique. Par exemple, dans la notation avec flèche vers le haut Knuth , le nombre (théoriquement) généré par le programme ci-dessus devrait être d’environ 10 ↑ 3 10 377 , donnez ou prenez quelques (ou 10 377 ) puissances de dix, en supposant que j’ai bien fait les calculs.
Des chiffres comme celui-ci vont bien au-delà du mot "incroyablement énorme" et dans le domaine de "l'inconcevable". Comme dans, non seulement il est impossible de compter ou d'écrire de tels nombres (nous avons déjà dépassé ce point au troisième exemple ci-dessus), mais ils n'ont littéralement aucun usage ou existence concevable en dehors des mathématiques abstraites. Nous pouvons prouver, à partir des axiomes des mathématiques , que de tels nombres existent, tout comme nous pouvons prouver de la spécification GolfScript que le programme ci - dessus les calculera, si les limites de la réalité et de l'espace de stockage disponible n'intervenaient pas), mais il n'y a littéralement rien dans l'univers physique que nous pourrions utiliser pour compter ou mesurer dans tous les sens.
Pourtant, les mathématiciens utilisent parfois des nombres encore plus grands . (Théoriquement) les numéros de calcul que grand prend un peu plus de travail - au lieu de l' imbrication des boucles un peu plus un par un, nous devons utiliser la récursivité pour télescoper la profondeur des boucles imbriquées. Néanmoins, en principe, il devrait être possible d'écrire un court programme GolfScript (bien inférieur à 100 octets, je suppose) pour calculer (théoriquement) tout nombre exprimable en, par exemple, la notation en flèche chaînée de Conway ; les détails sont laissés comme un exercice. ;-)
la source
"...No computer ever built could store a number that big...
Corrigez-moi si je me trompe, mais je ne pense pas que cela s'applique ici. N'est-ce pas simplement "enregistrer" et imprimer de manière répétée 3 chiffres à la fois (?), Il n'est donc pas nécessaire de stocker le résultat final.JavaScript 44 caractères
Cela peut sembler un peu trompeur:
alert((Math.PI+''+Math.E).replace(/\./g,""))
Score = 31415926535897932718281828459045/44 ^ 3 3.688007904758867e + 26 10 ↑↑ 2.1536134004
la source
"."
pour remplacer au lieu de/\./g
m=Math,p=m.PI,e=m.E,s="",alert((p*p*p+s+e*e*e).replace(/\./g,s))
place, votre score est alors 3100627668029981620085536923187664/63 ^ 3 = 1.240017943838551e + 28C, note = 10 10 97.61735 / 98 3 ≈ 10 ↑↑ 2.29874984
J'apprécie l'aide pour marquer. Toutes les idées ou corrections sont appréciées. Voici ma méthode:
n = la concaténation de chaque nombre de 1 à 2 64 -1, répété (2 64 -1) 4 fois . Premièrement, voici comment j’estime (en bas) le nombre cumulé de chiffres compris entre 1 et 2 64 -1 (la "sous-séquence"): Le nombre final dans la séquence de sous-séquence est 2 64 -1 =
18446744073709551615
avec 20 chiffres. Ainsi, plus de 90% des numéros de la sous-séquence (ceux commençant par1
..9
) ont 19 chiffres. Supposons les 10% restants en moyenne, 10%. Ce sera beaucoup plus que cela, mais il s'agit d'une estimation basse pour un calcul facile et sans tricherie. Cette sous-séquence se répète (2 64 -1) 4 fois, donc la longueursur n sera au moins (0,9 × (2 64 -1) × 19 + 0,1 × (2 64 -1) × 10) × (2 64 -1) 4 = 3,86613 × 10 97 chiffres. Dans les commentaires ci - dessous, confirme @primo la longueur de n être 4.1433x10 97 . Donc, n sera lui-même 10 à ce pouvoir, ou 10 10 97.61735 .l = 98 caractères de code
note = n / l 3 = 10 10 97.61735 / 98 3
Condition préalable: doit être exécuté sur un ordinateur 64 bits où
sizeof(long) == 8
. Mac et Linux vont le faire.la source
'z'
est la valeur constante122
. Droite?printf("%d",n)
va rendre le nombre beaucoup plus grand. En outre, un ordinateur 64 bits ne signifie pas que la version longue est de 64 bits. Par exemple, Windows utilise le modèle LLP64 si la longueur est encore de 32 bits0..2^64-1
est exactement 357823770363079921190 chiffres. Les(2^64-1)^4
temps répétés sont 4.1433x10 ^ 97. Prendre 10 pour que le pouvoir est10^10^97.61735
≈ 10 ↑↑ 3.29875. Je pense que vous affirmez une puissance de dix , vous n'avez pas (notez où3.866×10^97
est devenu3.866^10^97
.2.0
au lieu de97
.10^10^10^2.00
=10^10^97.6
. Je vais refléter cela dans ma partition maintenant.Python 3 - 99 caractères - (le plus probable) nettement plus grand que le nombre de Graham
J'ai mis au point une fonction augmentant plus rapidement basée sur une extension de la fonction Ackermann.
http://fora.xkcd.com/viewtopic.php?f=17&t=31598 m'a inspiré, mais vous n'avez pas besoin de chercher là-bas pour comprendre mon numéro.
Voici la version modifiée de la fonction ackermann que je vais utiliser dans mon analyse:
Ma fonction
A
dans le code ci-dessus n'est techniquement pas la même, mais elle est en réalité plus forte, avec l'instruction suivante pour remplacer la troisième ligne de la définition ci-dessus:(a doit être au moins 1, il doit donc être plus fort)
Mais pour mes besoins, je supposerai qu’il s’agit du même que le plus simple, car l’analyse est déjà partiellement effectuée pour la fonction d’Ackermann, et donc pour cette fonction quand elle a deux arguments.
Il est garanti que ma fonction finira par arrêter de récurer car elle supprime toujours un argument, décrémente le premier argument ou conserve le même premier argument et décrémente le deuxième argument.
Analyse de taille
Le numéro de Graham, autant que je sache, peut être représenté comme suit
G(64)
:Où
↑^(n)
b est la notation de la flèche montante de knuth.Ainsi que:
Le nombre exprimé dans le programme ci-dessus est
A(0,1,2,3,4,...,123,124,125)
.Puisque
g^64(4)
c'est le nombre de Graham, et en supposant que mes calculs soient corrects, il est inférieur àA(1,64,100)
, mon nombre est nettement supérieur à celui de Graham.Signalez toutes les erreurs que j'ai commises dans mes calculs - bien que s’il n’y en ait pas, cela devrait être le plus grand nombre calculé à ce jour pour répondre à cette question.
la source
range(ord('~'))
? N'auriez-vous pas pu utiliserrange(125)
moins d'octets, ce qui vous permettrait d'insérer un nombre plus élevé, commerange(A(9,9,9))
?Perl - score 10 ↑↑ 4.1
Une fois encore, abusant du moteur de regex de Perl pour passer à travers une quantité inimaginable de combinaisons, cette fois en utilisant une descente récursive.
Dans la plus grande partie de l'expression, nous avons le choix
.
d'éviter une récursion infinie, limitant ainsi les niveaux de récursion à la longueur de la chaîne.Nous allons finir avec ceci:
... répété 671088640 fois, pour un total de 12750684161 nids - ce qui met complètement en échec ma précédente tentative de 23 nids. Remarquablement, perl n’étouffe même pas (une fois encore, l’utilisation de la mémoire reste stable à environ 1,3 Go), bien que la première instruction print prenne un certain temps à sortir.
De mon analyse précédente ci-dessous, il peut être conclu que le nombre de chiffres sortis sera de l'ordre de (! 12750684161) 671088640 , où ! K est le facteur de gauche de k (voir A003422 ). Nous pouvons approximer cela comme (k-1)! , qui est strictement plus petit, mais du même ordre de grandeur.
Et si nous demandons à wolframalpha :
... qui change à peine mon score du tout. Je pensais que ce serait au moins 10 ↑↑ 5 . Je suppose que la différence entre 10 ↑↑ 4 et 10 ↑↑ 4.1 est beaucoup plus grande que vous ne le pensez.
Perl - score 10 ↑↑ 4
Abuser du moteur Perl regex pour faire de la combinatoire pour nous. Le codeblock intégré
(??{print})
va insérer son résultat directement dans la regex. Puisque$_
est entièrement composé de2
s (et le résultat deprint
est toujours1
), cela ne peut jamais correspondre, et envoie Perl tourner à travers toutes les combinaisons possibles, parmi lesquelles il en existe quelques-unes.Constantes utilisées
$^F
- le descripteur de fichier système maximal, généralement2
.$]
- le numéro de version perl, similaire à5.016002
.$_
est alors une chaîne contenant le chiffre2
répété 671088640 fois. L'utilisation de la mémoire est constante à environ 1,3 Go, la sortie commence immédiatement.Une analyse
Définissons P k (n) comme le nombre d'exécutions de l'instruction print, où k est le nombre d'imbrication et n la longueur de la chaîne plus un (simplement parce que je n'ai pas envie d'écrire n + 1 partout).
(.*.*)*
P 2 (n) = [ 2, 8, 28, 96, 328, 1120, 3824, 13056, ... ]
((.*.*)*)*
P 3 (n) = [ 3, 18, 123, 900, 6693, 49926, 372615, 2781192, ... ]
(((.*.*)*)*)*
P 4 (n) = [ 4, 56, 1044, 20272, 394940, 7696008, 149970676, 2922453344, ... ]
((((.*.*)*)*)*)*
P 5 (n) = [ 5, 250, 16695, 1126580, 76039585, 5132387790, 346417023515, 23381856413800, ... ]
(((((.*.*)*)*)*)*)*
P 6 (n) = [ 6, 1452, 445698, 137050584, 42142941390, 12958920156996, ... ]
((((((.*.*)*)*)*)*)*)*
P 7 (n) = [ 7, 10094, 17634981, 30817120348, 53852913389555, ... ]
etc. En général, la formule peut être généralisée comme suit:
où
C’est-à- dire le facteur de gauche de k , c’est-à-dire la somme de toutes les factorielles inférieures à k (voir A003422 ).
Je suis incapable de déterminer les formulaires fermés pour D k et E k , mais cela n'a pas d'importance, si nous observons que
et
Avec 23 nids, cela nous donne un score approximatif de:
Cela devrait être presque exact, en fait.
Mais pour mettre cela dans une notation un peu plus facile à visualiser, nous pouvons approximer la base de l'exposant interne:
et ensuite l'exposant lui-même:
et ensuite demander à wolframalpha :
que vous pouvez aussi bien appeler 10 ↑↑ 4 et en finir .
la source
Javascript, 10 ↑↑↑↑ 210
100 caractères:
Sur la base de l'observation selon laquelle l'itération maximale
f
est la meilleure façon de procéder, j'ai remplacé les 13 appels àf
par 3 niveaux d'appels de boucles imbriquéesf
,z
multipliés par chacun (tout enf
continuant d'augmenter).z
).J'ai estimé la partition de manière analytique sur une feuille de papier. Je la dactylographierai si quelqu'un est intéressé à la voir.
Score amélioré: 10 ↑↑ 13
Javascript, encore exactement 100 caractères:
Cela améliore ma réponse initiale de trois manières—
Définir
z
sur la portée globale nous évite d'avoir à taper ào.z
chaque fois.Il est possible de définir un getter sur la portée globale (fenêtre) et de taper à la
f
place deo.f
.Avoir plus d'itérations de
f
vaut plus que de commencer par un nombre plus grand. Ainsi, au lieu de(Math.E+'').replace('.','')
(= 2718281828459045, 27 caractères), il est préférable d'utiliser~~Math.E+''
(= 2, 11 caractères) et d'utiliser les caractères récupérés pour appelerf
plusieurs fois.Comme, comme on le verra plus loin, chaque itération produit, à partir d’un nombre de l’ordre de grandeur M , un nombre supérieur de l’ordre de 10 M , ce code produit après chaque itération
Note: 10 10 10 10 10 16 10 ↑↑ 6.080669764
Javascript, en exactement 100 caractères:
Chacune
o.f
invoque la boucle while, pour un total de 5 boucles. Après seulement la première itération, le score est déjà supérieur à 10 42381398144233621 . À la deuxième itération, Mathematica était incapable de calculer même le nombre de chiffres du résultat.Voici une procédure pas à pas du code:
Init
Commencez par 2718281828459045 en supprimant le point décimal de
Math.E
.Itération 1
Concaténer la séquence décroissante des nombres,
former un nouveau numéro (gigantesque),
Combien de chiffres sont dans ce nombre? Eh bien, c'est la concaténation de
Dans Mathematica,
En d'autres termes, il s'agit de 2.72⋅10 42381398144233625 .
Faire ma partition, après seulement la première itération, 2.72⋅10 42381398144233619 .
Itération 2
Mais ce n'est que le début. Maintenant, répétez les étapes, en commençant par le nombre gigantesque ! C'est-à-dire, concaténer la séquence décroissante de nombres,
Alors, quelle est ma nouvelle partition, Mathematica?
Itération 3
Répéter.
Itération 4
Répéter.
Itération 5
Répéter.
Score analytique
Lors de la première itération, nous avons calculé le nombre de chiffres dans la concaténation de la séquence décroissante à partir de 2718281828459045, en comptant le nombre de chiffres dans
Cette somme peut être représentée par la formule,
où Z désigne le numéro de départ ( par exemple 2718281828459045) et O Z désigne son ordre de grandeur ( par exemple 15, car Z 10 15 ). En utilisant des équivalences pour des sommes finies , ce qui précède peut être exprimé explicitement par
qui, si nous prenons 9 ≈ 10, se réduit encore à
et, enfin, en élargissant les termes et en les classant par ordre de grandeur décroissant, nous obtenons
Maintenant, comme nous ne sommes intéressés que par l’ordre de grandeur du résultat, substituons à Z un "nombre de l’ordre de grandeur de O Z ", c’est-à-dire 10 O Z -
Enfin, les 2ème et 3ème termes sont annulés et les deux derniers termes peuvent être supprimés (leur taille est triviale), nous laissant
à partir duquel le premier terme l'emporte.
Retraité,
f
prend un nombre de l'ordre de M et produit un nombre approximativement de l'ordre de M (10 M ).La première itération peut facilement être vérifiée à la main. 2718281828459045 est un nombre de l'ordre de 15 -
f
doit par conséquent produire un nombre de l'ordre de 15 (10 15 ) 10 16 . En effet, le nombre produit est, à partir de l’avant, de 2,72 à 10 42381398144233625 - soit 10 42381398144233625 10 10 16 .Notant que M n’est pas un facteur significatif dans M (10 M ), l’ordre de grandeur du résultat de chaque itération suit donc un schéma simple de pénétration:
Sources LaTeX
la source
f
fait quelque chose comme prendre le nombrez
à son propre pouvoir. Donc, c'est quelque chose comme↑↑↑
. Bien sûr, le score n'est pas2↑↑↑2
, désolé ... mais plutôt,2↑↑↑5+1
semble-t-il. Seriez-vous d'accord, devrais-je mettre cela dans le classement?i=o.z;while(i--)...
vous n'exécutez pas leso.z
temps de boucle , car une boucle est basée sur une variable entière eto.z
contient une chaîne plus grande que le plus grand entier représentable, en fonction de la taille du mot de votre interprète. Supposons à votre avantage que votre interprète ne refusera pas de convertir une telle chaîne en int,i
il commencera chaque fois par sa plus grande valeur entière représentable, par exemple 2 ^ 63, et non par la valeur couranteo.z
.APL, 10 ↑↑ 3.4
Voici ma tentative révisée:
Programme de 100 caractères / octet *, fonctionnant sur le matériel actuel (utilise une quantité de mémoire négligeable et des variables int standard de 32 bits) bien que son exécution prenne beaucoup de temps.
Vous pouvez réellement l'exécuter sur un interpréteur APL et il commencera à imprimer des chiffres. S'il est autorisé à terminer, il aura imprimé un nombre de 10 × 123456789 44 chiffres.
Par conséquent , le score est de 10 10 x 123.456.789 44 /100 3 ≈ 10 10 353 ≈ 10 ↑↑ 3,406161
Explication
⎕D
est une chaîne constante prédéfinie égale à'0123456789'
n←⍎⎕D
définit n comme étant le nombre représenté par cette chaîne: 123456789 (qui est <2 31 et peut donc être utilisé comme variable de contrôle de boucle){⍞←⎕D}
imprimera les 10 chiffres sur la sortie standard, sans nouvelle ligne{⍞←⎕D}⍣n
le fera n fois (⍣
est le "power operator": ce n'est ni *, /, ni ^, car ce n'est pas une opération mathématique, c'est une sorte de boucle){⍞←n}⍣n⍣n
répétera l'opération précédente n fois, donc en imprimant les 10 chiffres n 2 fois{⍞←n}⍣n⍣n⍣n
va le faire n 3 fois⍣n
dedans, donc ça imprime n 44 fois la corde'0123456789'
.⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
*: APL peut être écrit dans son propre jeu de caractères codé sur un octet (existant) qui mappe les symboles APL sur les valeurs supérieures à 128 octets. Par conséquent, aux fins de la notation, un programme de N caractères qui utilise uniquement des caractères ASCII et des symboles APL peut être considéré comme ayant une longueur de N octets.
la source
100 cubed
(100 ^ 3) pour moi.{⍞←⎕D}
de⍞←
qui vous permet d' économiser trois octets que vous pouvez utiliser pour ajouter un⍣n
et faire⊢n←⍎⎕D
en⌽⍕n←⍎⎕D
une augmentation de 80 fois. Si vous autorisez l'exécution avec⎕PP←17
puis utilisez×⍨
plutôt que de⌽⍕
doubler le nombre de chiffres imprimés.Haskell, score: (2 2 2 65536 -3) / 1000000 2 ↑↑ 7 10 ↑↑ 4.6329710779
Ce programme contient exactement 100 octets de code Haskell pur. Il imprimera le quatrième nombre Ackermann, consommant ainsi toute l’énergie disponible, matière et heure de l’Univers et au-delà ( dépassant ainsi légèrement la limite souple de 5 secondes).
la source
o=length[]
vous obtient un extra!q
à la fin et vous enregistre un octet en plus de cela.Python, 2 ↑↑ 11/830584 10 ↑↑ 8.632971 (notation avec la flèche vers le haut Knuth)
Probablement aucun ordinateur n'a assez de mémoire pour exécuter ceci correctement, mais ce n'est pas vraiment la faute du programme. Avec la configuration système minimale satisfaite, cela fonctionne.
Oui, cela change quelque peu les valeurs booléennes.
True
est contraint de1
dans ce contexte. Python a des entiers de longueur arbitraire.la source
print True<<(True<<(True<<(True<<True<<True)))
Fait seulement , et cela sort une chaîne de 19k.t=True
et en utilisant ensuitet
?$python -c 'print True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<True<<True)))))))))' Traceback (most recent call last): File "<string>", line 1, in <module> OverflowError: long int too large to convert to int
GolfScript 3.673e + 374
Je pense que le
*
est autorisé car il indique la répétition de chaîne, pas la multiplication.Explication:
'~'(
laissera 126 (la valeur ASCII de "~") sur la pile. Copiez ensuite le nombre, convertissez-le en chaîne et répétez-le 126 fois. Cela donne126126126126...
ce qui est approximativement1.26 e+377
. La solution est de 7 caractères, divisez donc par7^3
, pour un score d'environ3.673e+374
la source
Ruby, probabilistiquement infini, 54 caractères
x est initialisé à 97. Nous procédons ensuite comme suit: Générez x nombres aléatoires entre 0 et 1. S'ils sont tous identiques, terminez et imprimez x. Sinon, doublez x et répétez. Comme les nombres aléatoires de Ruby ont une précision de 17 chiffres, les chances de terminer à chaque étape sont de 1 sur (10e17) ^ x. La probabilité de terminer par n étapes est donc la somme pour x = 1 à n de (1 / 10e17) ^ (2 ^ n), qui converge vers 1 / 10e34. Cela signifie que quel que soit le nombre, quelle que soit sa taille, il est extrêmement improbable que ce programme produise un nombre inférieur.
Maintenant, bien sûr, la question philosophique est de savoir si un programme qui a moins de 1 chance sur 10 ^ 34 de se terminer à l’étape n pour n’importe quel n se termine jamais. Si nous supposons non seulement un temps et une puissance infinis, mais également que le programme a la capacité de fonctionner à une vitesse croissante à un taux supérieur à celui auquel la probabilité de terminer diminue, nous pouvons, je crois, en fait rendre la probabilité de se terminant au temps t arbitrairement proche de 1.
la source
GolfScript, ≈ f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0)) (f ε 0 (126)))))))))
C’est une adaptation sans vergogne de une autre réponse de @Howard et intègre les suggestions de @Peter Taylor.
Ma compréhension de GolfScript est limitée, mais je crois que le
*
et les^
opérateurs ci - dessus sont pas les opérateurs arithmétiques interdites par l'OP.(Je supprimerai volontiers ceci si @Howard veut soumettre sa propre version, qui serait de toute façon supérieure à celle-ci.)
Ce programme calcule un nombre qui est d' environ f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (126)))))) ))) - une itération neuf de f ε 0 - où f ε 0 est la fonction dans la hiérarchie en croissance rapide qui croît à peu près au même rythme que la fonction de Goodstein. (f ε 0croît si vite que les taux de croissance de la fonction n (k) de Friedman et des flèches k-fold coniques de Conway sont pratiquement insignifiants, même par comparaison à un seul f ε 0 non itéré .)
la source
'',:o;'oo',:t;
assigne simplement les valeurs0
ào
et2
àt
; si c'est juste pour contourner le manque de chiffres, il peut être fortement abrégé,:o)):t;
, sauf qu'il n'y a aucune raison de supprimert
en premier lieu, car vous pouvez écrireexpr:t;{...}:f;[[[t]f]f]f
en[[[expr:t]{...}:f~]f]f
sauvegardant 3 caractères supplémentaires.o
: je suis à peu près sûr que ce[0 126]f
sera un plus grand que de[126]f
sorte que vous enregistrez un caractère et cogner la sortie. Bien que vous laissiez une chaîne vide à l'intérieur, ce qui casse probablement des choses: il serait peut-être préférable de commencer[[,:o'~'=]
[
sont inutiles puisque vous n'avez rien d'autre sur la pile.dc, 100 caractères
Avec assez de temps et de mémoire, cela va calculer un nombre d'environ 15 ↑ ¹⁶⁶⁶⁶⁶⁵ 15. J'avais initialement implémenté la fonction d' hyperopération , mais cela nécessitait trop de caractères pour relever ce défi. J'ai donc supprimé les conditions
n = 2, b = 0
etn >= 3, b = 0
, transformant ainsi lan = 1, b = 0
condition enn >= 1, b = 0
.Les seuls opérateurs arithmétiques utilisés ici sont l'addition et la soustraction.
EDIT: comme promis dans les commentaires, voici le détail de ce que fait ce code:
Comme indiqué plus haut, ceci diffère de la fonction d'hyperopération en ce que les cas de base pour la multiplication et les niveaux supérieurs sont remplacés par le cas de base pour l'addition. Ce code se comporte comme si
a*0 = a^0 = a↑0 = a↑↑0 ... = a
, au lieu du mathématiquement correcta*0 = 0
eta^0 = a↑0 = a↑↑0 ... = 1
. En conséquence, il calcule des valeurs un peu plus élevées qu’elles ne devraient être, mais ce n’est pas grave, car nous visons de plus grands nombres. :)EDIT: Je viens de remarquer qu’un chiffre a glissé dans le code par accident, dans la macro qui effectue des incréments pour
n=0
. Je l'ai supprimé en le remplaçant par «F» (15), ce qui a pour effet secondaire de réduire chaque opération d'incrémentation de 15. Je ne sais pas dans quelle mesure cela affecte le résultat final, mais c'est probablement beaucoup plus grand maintenant.la source
Plus de limite d'exécution? Alors ok.
Le programme doit-il être exécutable sur des ordinateurs modernes?
Les deux solutions utilisant une compilation 64 bits, il
long
s’agit donc d’un entier 64 bits.C: supérieur à 10 (2 64 -1) 2 64 , ce qui est lui-même supérieur à 10 10 355393490465494856447 10 ↑↑ 4.11820744
88 caractères.
Pour faciliter ces formules, je vais utiliser
t = 2^64-1 = 18446744073709551615
.main
appelleraf
avec un paramètre det
, qui bouclera lest
temps, en imprimant chaque fois la valeurt
et en appelantf
avec un paramètre det-1
.Chiffres imprimés au total:
20 * t
.Chacun de ces appels
f
avec un paramètret-1
it va itérer let
temps, afficher la valeurt
et appeler f avec un paramètre det-2
.Nombre total de chiffres imprimés:
20 * (t + t*t)
J'ai essayé ce programme en utilisant l'équivalent de nombres entiers de 3 bits (je me suis mis
i = 8
et j'ai eu l'appel principalf(7)
). Il a frappé la déclaration d'impression 6725600 fois. Cela7^8 + 7^7 + 7^6 + 7^5 + 7^4 + 7^3 + 7^2 + 7
revient à Par conséquent, je crois que ceci est le décompte final du programme complet:Nombre total de chiffres imprimés:
20 * (t + t*t + t^3 + ... + t^(t-1) + t^t + t^(2^64))
Je ne sais pas comment calculer (2 64 -1) 2 64 . Cette somme est inférieure à (2 64 ) 2 64 et il me faut une puissance de deux pour effectuer ce calcul. Par conséquent, je vais calculer (2 64 ) 2 64 -1 . C'est plus petit que le résultat réel, mais comme c'est une puissance de deux, je peux le convertir en une puissance de 10 pour la comparaison avec d'autres résultats.
Est-ce que quelqu'un sait comment effectuer cette sommation ou comment convertir (2 64 -1) 2 64 à 10 n ?
Mais rappelez-vous, c'est le nombre de chiffres imprimés. La valeur de l'entier est 10 élevée à cette puissance, donc 10 ^ 10 ^ 355393490465494856447
Ce programme aura une profondeur de pile de 2 ^ 64. Cela fait 2 ^ 72 octets de mémoire juste pour stocker les compteurs de boucles. Cela représente 4 milliards de téraoctets de compteurs de boucles. Sans parler des autres choses qui iraient sur la pile pour 2 ^ 64 niveaux de récursivité.
Edit: Correction d'une paire de fautes de frappe et utilisation d'une valeur plus précise pour log2 (10).
Edit 2: Attendez une seconde, j'ai une boucle dont le printf est en dehors. Réglons ça. Ajout en cours d'initialisation
i
.Edit 3: Dang it, j'ai foiré le calcul sur l'édition précédente. Fixé.
Celui-ci fonctionnera sur des ordinateurs modernes, bien qu'il ne finisse pas de si tôt.
C: 10 ^ 10 ^ 136 ≈ 10 ↑↑ 3.329100567
98 caractères.
Cela imprimera l'inverse-bit de zéro, 2 ^ 64-1, une fois pour chaque itération. 2 ^ 64-1 est un numéro à 20 chiffres.
Nombre de chiffres =
20 * (2^64-1)^7
= 1453677448591213780547019529026486359825087615481303750744349513987271378796172778919719519719Arrondissant la longueur du programme à 100 caractères, Score = numéro imprimé / 1 000 000
Score = 10 ^ 14536774485912137805419195902648635982508761548130375074434951398727137879678696286195485195195195195195195195195195197
la source
%u
étaitll
en train d' imprimer des nombres 32 bits même avec une compilation 64 bits, alors je me suis éloigné de l'habitude d'écrire dans un compilateur 32 bits.%llu
serait pourlong long
, et%lu
serait correct pourlong
.%u
toujours 32 bits,%llu
toujours 64 bits, que la compilation soit 32 ou 64 bits. Cependant, la solution ici nécessite que celong
soit en 64 bits, donc vous avez raison, cela%lu
suffit.i
.R -
4941 caractères de code, 4.03624169270483442 * 10 ^ 5928 ≈ 10 ↑↑ 2.576681348imprimera [reproduisant ici juste le début]:
la source
cat
est une fonction étrange en ce que le premier argument est...
. Donc tout ce qui précède le premier argument nommé va à...
(et seracat
'édité), ce qui explique pourquoisep
il faut le nommer - sinon on pourrait le raccourcir de la manière suivantecat(abs(.Random.seed),,"")
ECMAScript 6 - 10 ^ 3 ↑↑↑↑ 3/884736
(3 ↑↑↑↑ 3 est G (1) où G (64) est le nombre de Graham)
Sortie: 10 ^ 3 ↑↑↑↑ 3
Conseils:
Supprimée pour des raisons de concision.G
est la fonction où G (64) est le numéro de Graham. L'entrée est un entier. La sortie est une chaîne unaire écrite avec 0.K
est la fonction de flèche vers le haut Knuth a ↑ n b où a est implicitement 3. L'entrée est n, une chaîne unaire et b, une chaîne unaire. La sortie est une chaîne unaire.u
est "1".v
est "0000" ou G (0)e
est "000".la source
Maximum code length is 100 bytes;
Sinon, c'est presque imbattableC
(Avec des excuses à Darren Stone)
n = 2 ^ 64 chiffres (9 ...)
l = 100 caractères de code
score ≈ 1e + 213598703592091008239502170616955211460270452235665276994704160782221972578064055002296207097070 ≈ 10 ↑ ^ 3.2974890744
[Note = n ^ 5 / l ^ 3 = (10 ^ (2 ^ 320) -1) / (100 ^ 3) = (10 ^ 2135987035920910082395025025325625954252)
Notez que je mérite d'être fouetté sans pitié pour cette réponse, mais que je n'ai pas pu résister. Je ne recommande pas d'agir comme moi sur stackexchange, pour des raisons évidentes. :-P
EDIT: Il serait encore plus difficile de résister à la tentation de faire quelque chose comme
... mais je suppose qu'une règle voulue mais non spécifiée était que toute la série de chiffres constituant le numéro devait être imprimée.
la source
)
, mais ce n'est pas grave, car vous ne comptez que 96 caractères.New Ruby: Note ~ f co co2 1 (126 2 2 126 )
où f α (n) est la hiérarchie en croissance rapide.
Essayez-le en ligne!
Ce
*n
sont juste des multiplications de chaînes et de tableaux, elles devraient donc aller bien.Code non golfé:
où
b.-b<=>0
renvoie un entier1
plus proche de0
queb
.Explication:
Il imprime
n
au début de chaque appel deH
.H[[]]
doublesn
(n
fois), à savoirn = n<<n
.H[[0,a,b,c,...,z]]
appelsH[[a,b,c,...,z]]
(n
fois).H[[k+1,a,b,c,...,z]]
appelsH[[k]*n+[a,b,c,...,z]]
(n
fois), où[k]*n = [k,k,...,k]
.H[[-1,a,b,c,...,z]]
appelsH[[n]*n+[a,b,c,...,z]]
(n
fois).H[[-(k+1),a,b,c,...,z]]
appelsH[[-k]*n+[a,b,c,...,z]]
(n
fois).H[k] = H[[k]]
.Mon programme s’initialise
n = 126
puis appelleH[-n-1]
126 2 2 126 fois.Exemples:
H[[0]]
appelleraH[[]]
qui s’appliquen = n<<n
(n
fois).H[[0,0]]
va appelerH[[0]]
(n
fois).H[[1]]
va appelerH[[0]*n]
(n
fois).H[[-1]]
va appelerH[[n]*n]
(n
fois).H[[-1,-1]]
va appelerH[[n]*n+[-1]]
(n
fois).H[[-3]]
va appelerH[[-2]*n]
(n
fois).Essayez-le en ligne!
Voir les révisions pour d'autres choses intéressantes.
la source
Haskell - Fonction Ackermann appliquée à son résultat 20 fois - 99 caractères
C’est la meilleure solution haskell que je puisse trouver sur la base de la fonction ackermann - vous remarquerez peut-être quelques similitudes avec la solution de nm, le i = round $ log pi a été inspiré à partir de là et le reste n’est qu’une coïncidence: D
Il exécute la fonction ackermann sur elle-même 20 fois, en commençant à un, la séquence étant
En ce qui concerne l'estimation, Wikipédia dit:
a (m, n) = 2 ↑ m-2 (n + 3) - 3
De là, on peut voir a3 (1) = a (61,61) = 2 ↑ 59 64 + 3, ce qui est nettement supérieur à g1 = 3 ↑ 4 3, à moins que le 3 au départ soit beaucoup plus important que je ne le pense. Ensuite, chaque niveau effectue les opérations suivantes (en éliminant les constantes non significatives dans un n ):
Si ceux-ci sont approximativement équivalents, alors un 20 (1) ~ = g 18 . Le terme final dans un n , (un n-1 ) est beaucoup plus grand que 3, donc potentiellement plus grand que g 18 . Je verrai si je peux comprendre si cela le stimulerait même une seule itération et ferait rapport.
la source
length"a"
enregistre quelques octets et vous en permet une autre.a
Code machine x86 - 100 octets (assemblé en tant que fichier MSDOS .com)
Note: peut plier les règles un peu
Ce programme produira 2 (65536 * 8 + 32) neuf résultats qui donneraient le score à (10 2 524320 -1) / 1000000
En guise de compteur, ce programme utilise l’ensemble de la pile (64kiB) plus deux registres 16 bits.
Code assemblé:
Assemblée:
la source
C
La taille du fichier est de 45 octets.
Le programme est:
Et le nombre produit est supérieur à 10 ^ (10 ^ (10 ^ 1.305451600608433)).
Le fichier que j'ai redirigé vers std out est actuellement supérieur à 16 Go et continue de croître.
Le programme se terminerait dans un délai raisonnable si j'avais un meilleur ordinateur.
Mon score n'est pas calculable avec une virgule flottante en double précision.
la source
GNU Bash, 10 ^ 40964096² /
80 ^ 3 10 ↑↑ 2.072820169C = 4096 sur tout système raisonnable. SHLVL est un petit entier positif (généralement 1 ou 2 selon que / bin / sh est bash ou non).
UNIX 64 bits uniquement:
Score: ~ 10 ^ (40964096409640964096 * 40964096409640964096) / 88 ^ 3
la source
bash -c 'bash -c "echo \$SHLVL"'
stat --printf
ne travaille pas. Essayezstat -c %s
C, 10 ^ 10 ^ 2485766 ≈ 10 ↑↑ 3.805871804
Nous créons un tableau de 258048 entiers non signés. Il ne pouvait pas être longtemps non signé car cela rendait le programme trop long. Ils ne sont pas signés parce que je ne veux pas utiliser un comportement indéfini, ce code est propre C (autre que l'absence de retour de main ()) et sera compilé et exécuté sur n'importe quel ordinateur normal, il continuera à fonctionner pendant longtemps . Cette taille est la plus grande que nous puissions légalement exprimer sans utiliser de caractères non ASCII.
Nous parcourons le tableau à partir du dernier élément. Nous imprimons les chiffres de
2^32-1
, incrémentons l’élément et lâchons la boucle si l’élément n’a pas été encapsulé à 0. De cette façon, nous bouclerons les(2^32 - 1)^254048 = 2^8257536
temps en imprimant 10 chiffres à chaque fois.Voici un exemple de code montrant le principe dans une plage de données plus limitée:
Le résultat est environ 10 ^ 10 ^ 2485766 divisé par un million, ce qui correspond encore à peu près à 10 ^ 10 ^ 2485766.
la source
Powershell (2.53e107976 / 72³ = 6.78e107970 10 ↑↑ 1.701853371)
Cela prend plus de 5 secondes pour s'exécuter.
Il récupère et concatène la longueur en octets de chaque fichier de votre lecteur actuel. Regex supprime tous les caractères non numériques.
la source
0
dedans.-ea(+'')
pour réduire la taille (''
convertie en un nombre est0
, dont la valeur enum deSilentlyContinue
). Vous pouvez utiliser\D
pour le regex de remplacement qui est identique à[^\d]
. Et vous pouvez simplement utiliser à la%{$_.Length}
place de celuiselect Length
qui supprime les en-têtes de colonnes. Et puis vous pouvez vous débarrasser de la-split
et-replace
ainsi, vous laissant avec-join(gci \ -ea(+'')-r|%{$_.Length})
37 caractères plus courts (j'ai également réorganisé les paramètres car les parenthèses sont nécessaires de toute façon à cause de+''
).Python 3, score = ack (126,126) / 100 ^ 3
La fonction f est la fonction ackermann, que j’ai juste assez d’espace pour être invoquée.
Edit: précédemment "else n + 1", ce qui contrevenait aux règles du challenge - bravo à Simply Beautiful Art.
la source
f(m-g,g)
àf(m-g,m)
.f(m-g,i)
. De plus, à la fin de la première ligne, vous utilisez un numéro. Je crois que vous aviez l'intention d'utilisern+g
, après quoi je ferai remarquern+n
qu'il sera plus grand.JavaScript 98 caractères
génère 2.718e + 239622337 10 ↑↑ 2.9232195202
Pour un score légèrement supérieur à 2,718e + 239622331 ≈ 10 ↑↑ 2.9232195197
qui est la plus grande que je puisse faire sans que le navigateur ne se bloque.
(console.log (a) vous montrera la sortie complète)
Ne lancez pas ceci:
serait sortie 2.718 + e121333054704 10 ↑↑ 3.0189898069 (aka 2.718 * 10 ^ (1.213 * 10 ^ 12) à comparer à la réponse plus longue:
version plus extrême, si cela n'a pas bloqué votre navigateur: (80 char)
ce qui créerait un nombre autour de la même taille que e * 10 ^ (10 ^ 19) 10 ↑↑ 3.106786869689
Edit: la solution originale mise à jour du code n'a généré que 2.718e + 464
la source
Python 3: 98 caractères, 10 ↑↑ 256
Utiliser une fonction à argument variable:
Effectivement, E décrémente le premier argument en augmentant le reste des arguments, sauf qu'au lieu de mettre -1 dans les arguments, il supprime l'argument. Étant donné que chaque cycle décrémente le premier argument ou diminue le nombre d'arguments, il est garanti que cela se termine. La fonction croissante utilisée est int ("% d% d"% (k, k)), ce qui donne un résultat compris entre k ** 2 + 2 * k et 10 * k ** 2 + k. Mon code utilise le symbole *, mais pas comme une multiplication. Il est habitué à travailler avec un nombre variable d'arguments, ce qui, à mon avis, devrait suivre les règles, car l'objectif clair de ces règles était de restreindre des opérations spécifiques, pas les symboles eux-mêmes.
Quelques exemples de la taille rapide de E:
Seuls les deux premiers sont exécutables sur mon ordinateur dans un délai raisonnable.
Ensuite, E est invoqué par
E(*range(ord('~')))
- ce qui signifie:Je ne suis pas tout à fait sûr de sa taille (j'ai essayé de l'approcher en vain) - mais il est évident que c'est ~ vraiment ~ grand.
Par exemple, environ douze cycles, le résultat est environ: (techniquement un peu plus que)
Estimation du résultat:
Si on se rapproche de l’augmentation progressive
lambda k: 10 * k**2
, la fonction peut être décrite commeLa chose pertinente que nous faisons ici est de construire une tour avec des puissances de dix, de sorte que le score final puisse être estimé à 10 ↑↑ 256.
Meilleure estimation des résultats (bien que partielle):
Ceci utilise la même chose
10 * k**2
que l'autre estimation.Selon l'estimation précédente, ce serait:
Ce qui est nettement inférieur à la valeur réelle car il utilise
a**2
au lieu de2**a
pour le 10 et utilisea*2
au lieu de2**a
pour le b.la source
C (score ≈ 10 ^ 20 000 000 000 ≈ 10 ↑↑ 3.005558275)
Malgré
rand()
le résultat, il est déterministe car il n’ya pas de fonction graine.la source
rand()
condition de fin le rend non déterministe. De plus, appelerrand()
à chaque itération devrait le rendre terriblement lent. Utilisez quelque chose commeLONG_MAX
défini dans lalimits.h
place.non deterministic
dos, car il n'y a pas de graine comme tu l'as écrit.~' '
au lieu derand()
, imprimé avec%u
? Deux octets moins la source et une valeur plus élevée.