Certains d'entre vous connaissent peut-être le BigNum Bakeoff , qui s'est avéré assez intéressant. L'objectif peut être plus ou moins résumé comme l'écriture d'un programme C dont la sortie serait la plus importante, sous certaines contraintes et conditions théoriques, par exemple un ordinateur qui pourrait exécuter le programme.
Dans le même esprit, je pose un défi similaire ouvert à toutes les langues. Les conditions sont les suivantes:
512 octets maximum .
Le résultat final doit être imprimé sur STDOUT. Ceci est votre score. Si plusieurs entiers sont imprimés, ils seront concaténés.
La sortie doit être un entier. (Remarque: Infinity n'est pas un entier .)
Aucune constante intégrée supérieure à 10, mais les chiffres / chiffres sont corrects (par exemple, la constante d'Avogadro (en tant que constante intégrée) n'est pas valide, mais 10000 ne l'est pas.)
Le programme doit se terminer lorsqu'il dispose de ressources suffisantes pour être exécuté.
La sortie imprimée doit être déterministe lorsqu'elle dispose de ressources suffisantes pour être exécutée.
On vous fournit des nombres entiers ou bigints suffisamment grands pour que votre programme s'exécute. Par exemple, si votre programme nécessite l'application d'opérations de base à des nombres inférieurs à 10 1 000 000 , vous pouvez supposer que l'ordinateur exécutant ce système peut gérer des nombres d'au moins 10 1 000 000 . (Remarque: votre programme peut également être exécuté sur un ordinateur qui gère des nombres allant jusqu'à 10 2 000 000 , donc le simple fait d'appeler l'entier maximum que l'ordinateur peut gérer n'entraînera pas de résultats déterministes.)
Vous disposez d'une puissance de calcul suffisante pour que votre programme puisse terminer son exécution en moins de 5 secondes. (Ne vous inquiétez donc pas si votre programme fonctionne depuis une heure sur votre ordinateur et ne se terminera pas de si tôt.)
Pas de ressources externes, alors ne pensez pas à importer cette fonction Ackermann à moins qu'elle ne soit intégrée.
Tous les objets magiques sont temporairement empruntés à une généreuse divinité.
Extrêmement grand avec une limite inconnue
- Steven H , Pyth f 3 + B³F + ω² (256 26 )
où B³F est l'ordinal de Church-Kleene avec la séquence fondamentale de
B³F[n] = B³F(n), the Busy Beaver BrainF*** variant
B³F[x] = x, ω ≤ x < B³F
Classement:
Simply Beautiful Art , Ruby f ψ 0 (X (Ω M + X (Ω M + 1 Ω M + 1 ) )) + 29 (9 9 9 )
Steven H , Pyth f ψ (Ω Ω ) + ω² + 183 (256 27! )
Leaky Nun , Python 3 f ε 0 (9 9 9 )
fejfo , Python 3 f ω ω 6 (f ω ω 5 (9e999))
Steven H , Python 3 f ω ω + ω² (9 9 9 99 )
L'art tout simplement magnifique , Ruby f ω + 35 (9 9 99 )
i .. , Python 2 , f 3 (f 3 (141))
Quelques notes annexes:
Si nous ne pouvons pas vérifier votre score, nous ne pouvons pas le mettre dans le classement. Vous pouvez donc vous attendre à expliquer un peu votre programme.
De même, si vous ne comprenez pas la taille de votre numéro, expliquez votre programme et nous essaierons de le résoudre.
Si vous utilisez un type de programme de type Loader , je vais vous placer dans une catégorie distincte appelée "Extrêmement grand avec une limite inconnue" , car le numéro de Loader n'a pas de limite supérieure non triviale en termes de hiérarchie à croissance rapide pour ' séquences fondamentales standard.
Les nombres seront classés via la hiérarchie à croissance rapide .
Pour ceux qui voudraient apprendre à utiliser la hiérarchie à croissance rapide pour approximer de très grands nombres, j'héberge un serveur Discord juste pour cela. Il y a aussi une salle de chat: Ordinality .
Défis similaires:
Le plus grand nombre imprimable
Golf un nombre plus grand que TREE (3)
Programme de terminaison le plus court dont la taille de sortie dépasse le nombre de Graham
Pour ceux qui veulent voir des programmes simples qui produisent la hiérarchie à croissance rapide pour les petites valeurs, les voici:
Ruby: une hiérarchie en croissance rapide
#f_0:
f=->n{n+=1}
#f_1:
f=->n{n.times{n+=1};n}
#f_2:
f=->n{n.times{n.times{n+=1}};n}
#f_3:
f=->n{n.times{n.times{n.times{n+=1}}};n}
#f_ω:
f=->n{eval("n.times{"*n+"n+=1"+"}"*n);n}
#f_(ω+1):
f=->n{n.times{eval("n.times{"*n+"n+=1"+"}"*n)};n}
#f_(ω+2):
f=->n{n.times{n.times{eval("n.times{"*n+"n+=1"+"}"*n)}};n}
#f_(ω+3):
f=->n{n.times{n.times{n.times{eval("n.times{"*n+"n+=1"+"}"*n)}}};n}
#f_(ω∙2) = f_(ω+ω):
f=->n{eval("n.times{"*n+"eval(\"n.times{\"*n+\"n+=1\"+\"}\"*n)"+"}"*n);n}
etc.
Pour passer de f_x
à f_(x+1)
, nous ajoutons une boucle du n.times{...}
.
Sinon, nous diagonalisons par rapport à tous les précédents, par exemple
f_ω(1) = f_1(1)
f_ω(2) = f_2(2)
f_ω(3) = f_3(3)
f_(ω+ω)(1) = f_(ω+1)(1)
f_(ω+ω)(2) = f_(ω+2)(2)
f_(ω+ω)(3) = f_(ω+3)(3)
etc.
la source
Réponses:
Rubis, f ψ 0 (X (Ω M + X (Ω M + 1 Ω M + 1 ) )) + 29 (9 9 9 )
où M est le premier «ordinal» de Mahlo, X est la fonction chi (fonction d'effondrement de Mahlo) et ψ est la fonction d'effondrement ordinale.
Essayez-le en ligne!
Répartition du code:
Répartition des mathématiques:
f
réduit ena
fonctionn,b,q
.L'idée de base est d'avoir un élément extrêmement imbriqué
a
et de le réduire à plusieurs reprises jusqu'à ce qu'il soit réduit àa=0
. Pour plus de simplicité, laissezPour l'instant, ne nous inquiétons que de
n
.Pour tout entier
k
, nous obtenonsf[k,n]=k-1
, donc nous pouvons voir queNous avons alors, pour tout
d
, pourf[[0,d],n]=n
que nous puissions voir queNous avons, pour tout
c,d,e
,f[[c,0,e],n]=f[[c,d,0],n]=c
. Par exemple,Nous avons alors, pour tout
c,d,e
ce qu'il ne tombe pas dans le cas précédent,f[[c,d,e],n]=[[c,d,f[e,n]],f[d,n],e]
. C'est là que ça commence à se compliquer. Quelques exemples:Il monte rapidement à partir de là. Quelques points d'intérêt:
Finalement, l'introduction de plus d'arguments de la
f
fonction ainsi que de plus de cas pour le tableau nous permet de dépasser la plupart des notations calculables nommées. Certains particulièrement connus:la source
Pyth, f ψ (Ω Ω ) + ω 2 +183 (~ 256 27! )
Nécessite une entrée non vide, mais sa valeur n'est pas utilisée.
Explication (pour la nouvelle version avec un score réellement raisonnable ):
Il est très difficile pour moi de calculer la taille de cela, principalement parce
qu'il est tard dans la journée et que je ne suis pas très familier avec les hiérarchies à croissance rapide ou comment j'essaierais même de comprendre combien de fois Q passe par leBien que j'en sache maintenant plus sur les ordinaux, je ne sais toujours pas comment calculer la valeur de l'ordinal représenté par la définition récursive dans mon programme. Je rejoindrais le serveur Discord, mais sous un pseudonyme, je préfère ne pas être lié à mon vrai nom.y()
essoreuse.Malheureusement, parce que je sais relativement peu de choses sur ces hiérarchies à croissance rapide, je suis probablement déjà tombé sur la réponse Ruby. C'est difficile à dire pour moi.J'ai peut-être battu la réponse Ruby, mais je ne suis pas sûr à 100%.¯ \ _ (ツ) _ / ¯la source
27^^^27^^27^^4
, ouf<sub>4</sub>(27^^27^^4)) ≈ f<sub>4</sub>(f<sub>3</sub>(f<sub>3</sub>(19)))
.y
infirmerie pour opérer auy(Q-1)
lieu de simplement opérerQ
. Comment cela affecte-t-il le score?y(Q) = L(y(Q-1))
- ce que , en soi?Pyth, f 3 + σ -1 + ω 2 (256 26 )
Où σ m [n] est la fonction occupée Beaver Σ de l' ordre
m
appelén
: σ m [n] = Σ m (n). L'ordre-1
consiste à indiquer que le Castor occupé ici n'est pas appelé sur une véritable machine de Turing, mais plutôt une approximation avec une bande d'Q
éléments finis . Cela permet au problème d'arrêt d'être résolu pour ces programmes.Le TL; DR est que cela crée tous les programmes BrainF ** k possibles de longueur Q, les exécute dans un environnement où la valeur maximale d'un entier est Q et la longueur de bande est Q, et compile tous les états de ces opérations ensemble pour ajouter (c'est le
3+
) à Q, en répétant ce qui précède sur une échelle de f ω 2 .J'ai encore ~ la moitié des personnages avec qui travailler si je voulais faire quelque chose de plus, mais jusqu'à ce que nous trouvions où cela se trouve, je le laisse tel quel.
la source
python, f 3 (f 3 (141)), 512 octets
Ce n'est pas vraiment une réponse valable, mais je voulais quand même la publier. Un bref aperçu:
Quoi qu'il en soit, je ne sais pas si cette réponse est techniquement légale, mais c'était amusant à écrire. N'hésitez pas à modifier les erreurs que vous trouvez dans le code.
la source
for j in range(f(x)): for j in range(f(x)): x = f(x)
Cependant, vous obtiendriez un nombre beaucoup plus important en imbriquant . Rejoignez-nous dans le chat pour savoir pourquoi!Rubis, probablement ~ f ω + 35 (9 9 99 )
Essayez-le en ligne!
Explication mathématique approximative:
Ce qui suit est à peu près égal au programme ci-dessus, mais simplifié afin qu'il soit plus facile à comprendre.
G(0,k) = k
est notre fonction de base.Pour évaluer
G(n,k)
, nous le prenonsk
et l'écrivons commeG(n-1,1) + ... + G(n-2,1) + ... + G(0,1)
.Ensuite, changez tous les
G(x,1)
«enG(x,2)
» et soustrayez1
du résultat entier.Réécrivez-le dans le formulaire ci-dessus en utilisant
G(x,2)
, oùx<n
et laissez le reste à la fin. Répéter, passerG(x,2)
àG(x,3)
, etc.Lorsque le résultat atteint
-1
, retournez la base (celleb
qui serait dedansG(x,b)
.)Exemples:
G (1,1):
G (1,2):
G (1,3):
G (2,5):
En faisant des calculs, j'ai trouvé que
Et au-delà, cela a tendance à devenir un peu poilu.
En général, nous avons
la source
Python 3, f ω ω + ω * ω (9 9 9 99 )
Je vais bientôt avoir une explication.
la source
Python 3 , ~ f ε 0 (9 9 9 )
Essayez-le en ligne!
la source
Python 3, 323 octets, g 9e9 (9)
Essayez-le en ligne!
Explication
Python 3 est un langage vraiment récursif, cela signifie que non seulement une fonction peut s'appeler elle-même, mais une fonction peut également prendre d'autres fonctions comme fonctions d'entrée ou de sortie. Utiliser les fonctions pour s'améliorer est la base de mon programme.
f = lambda x, a: [a (x), e (x) ((x, a)) [1]]
Définition
Explication de la définition
a(x)=9^x
a est la fonction de base, j'ai choisi cette fonction car x> 0 => a (x)> x` ce qui évite les points fixes.b(x,f)=a(x), f^x
b est la fonction d'amélioration générale, elle prend n'importe quelle fonction et en produit une meilleure version. b peut même s'appliquer à lui-même:b(x,b)[1]=b^x
b(x,b^x)[1]=b^(x*x)
mais pour utiliser pleinement la puissance de
b
pour améliorer queb
vous devez prendre la sortie b et l' utiliser comme nouveau b, voici ce c0 fait:c0(…,f)=f(…,f)
c0(x,b^x)=b^x(x,b^x)[1]>b^(9↑↑x)
la fonction plus générale c (n) prend le n dernier argument (à partir de 0) ainsi
c(1)(…,f,a)=f(…,f,a)
etc(2)(…,f,a,b)=f(…,f,a,b)
.*l
signifie que l est un tableau etl[~n]
prend le n dernier argumentd(x,b,c,*l)=a(x), c0(x,b), b(x,c0), b(x,f) for f in l
d utilise c0 pour mettre à niveau b et b pour mettre à niveau toutes les autres fonctions d'entrée (dont il peut y avoir n'importe quel montant en raison de la liste)d(x,b,c,d)>9^x,b^x,c^x,d^x
etd²(x,b,c,d)>a²(x), b^(9↑↑x), c^(9↑↑x), d^(9↑↑x)
mais d devient encore meilleur si vous le combinez avec c:
c0²(x,b,c0,d)=d^x(9^x,b^x,c0^x,d^x)=…
c0(x,b,c0,d,c1)=c1(x,b,c0,d,c1)=d(x,b,c0,d,c1)=9^x,b^x,c0^x,d^x,c1^x
c0²(x,b,c0,d,c1)=c0(9^x,b^x,c0^x,d^x,c1^x)=c1^x(9^x,b^x,c0^x,d^x,c1^x)=…
plus vous ajoutez c (x) à la fin, plus il devient puissant. Le premier c0 reste toujours d:
c0(x,b,c0,d,c4,c3,c2,c1)=c1(…)=c2(…)=c3(…)=c4(…)=d(x,b,c0,d,cX,cX-1,…,c3,c2,c1)=…
mais le second laisse les versions itérées derrière:
Quand
d^x
est finalement calculéc4
prendra une version beaucoup plus itérée ded
la prochaine fois. Quandc4^x
est finalement calculéc3
prendra une version beaucoup plus itérée dec4
,…Cela crée une version d'itération vraiment puissante car
d
:b
utilisationc0
c0
utilisationb
b
Les améliorations elles-mêmes s'améliorent, cela signifie que d devient plus puissant lorsqu'il est itéré davantage.La création de cette longue chaîne de c est ce qui
e(x)=c0^x(x,b,c0,d,c(a(x)),c(a(x)-1),c(a(x)-2),…,c(3),c(2),c(1))[1]
fait.Il utilise
c0^x
pour contourner celac0
donnerait justed
.Les
[1]
signifie qu'il finira par revenir la deuxième sortied^…
. Alorsb^…
.À ce stade, je ne pouvais penser à rien à voir avec e (x) pour augmenter considérablement sa sortie, sauf augmenter l'entrée.
f(x,a)=a(x),e(a(x))(x,a)[1](x)
Utilise donc leb^…
généré pare(x)
pour produire une meilleure fonction de base et utilise cette fonction de base pour appelere(x)
avec une entrée plus grande.g(x)=e(x)(x,f)[1](x,a)[1](x)
utilise une finalee(x)
pour imbriquerf
et produit une fonction vraiment puissante.Approximation Fgh
J'aurai besoin d'aide pour approximer ce nombre avec n'importe quelle sorte de fgh.
Ancienne version : f ω ω 6 (f ω ω 5 (9e999)), essayez-le en ligne! Historique de révision de l'explication
la source
f_1(x) = x+x
mais à long terme, cela n'a pas trop d'importance.x*x
.a2(f_n)~=f_{n+1}
Ruby, f ε 0 2 (5), 271 octets
Essayez-le en ligne!
Ceci est basé sur la carte m (n) .
Explication:
m[0][f0][k] = f0[f0[...f0[k]...]]
avec desk
itérations def0
.m[1][f0][f1][k] = f0[f0[...f0[f1]...]][k]
avec desk
itérations def0
.m[2][f0][f1][f2][k] = f0[f0[...f0[f1]...]][f2][k]
avec desk
itérations def0
.En général,
m[n]
prend enn+2
arguments, itère le premier argument,f0
,k
fois sur le second argument, puis applique la fonction résultante sur le troisième argument (si elle existe), puis applique la fonction résultante sur le quatrième argument (si elle existe), etc.Exemples
m[0][n↦n+1][3] = (((3+1)+1)+1 = 6
En général
m[0][n↦n+1] = n↦2n
,.m[0][m[0][n↦n+1]][3] = m[0][n↦2n][3] = 2(2(2(3))) = 24
En général
m[0][m[0][n↦n+1]] = n↦n*2^n
,.En général,
m[1][m[0]][n↦n+1] = f_ω
dans la hiérarchie à croissance rapide.et la sortie finale étant
la source