La fonction TREE (k) donne la longueur de la plus longue séquence d'arbres T 1 , T 2 , ... où chaque sommet est étiqueté avec l'une des k couleurs, l'arbre T i a au plus i sommets et aucun arbre n'est un mineur de n'importe quel arbre le suivant dans la séquence.
TREE (1) = 1, avec par exemple T 1 = (1)
.
TREE (2) = 3: par exemple, T 1 = (1)
; T 2 = (2)--(2)
; T 3 = (2)
.
TREE (3) est un grand nombre. Même plus grand que le nombre de Graham. Votre travail consiste à produire un nombre encore plus grand que celui-ci!
Comme il s'agit d'un code-golf , l'objectif est d'écrire le programme le plus court, quelle que soit la langue, qui génère de manière déterministe un nombre supérieur ou égal à TREE (3) (sur la sortie standard).
- Vous n'êtes pas autorisé à prendre des entrées.
- Votre programme doit éventuellement se terminer, mais vous pouvez supposer que la machine a une mémoire infinie.
- Vous pouvez supposer que le type de numéro de votre langue peut contenir n'importe quelle valeur finie, mais vous devez expliquer comment cela fonctionne exactement dans votre langue (par exemple, un float a-t-il une précision infinie?)
- Les infinis ne sont pas autorisés en sortie.
- Le dépassement d'un type de nombre lève une exception. Ça ne s'enroule pas.
- Parce que TREE (3) est un nombre complexe, vous pouvez utiliser l' approximation à hiérarchie croissante f ϑ (Ω ω ω) +1 (3) comme nombre à battre.
- Vous devez expliquer pourquoi votre nombre est si grand et une version non codée de votre code pour vérifier si votre solution est valide (car aucun ordinateur ne dispose de suffisamment de mémoire pour stocker TREE (3) ).
Remarque: Aucune des réponses actuellement trouvées ici ne fonctionne.
la source
TREE(3)+1
là je gagneRéponses:
Nouveau Ruby, 135 octets, >> H ( 3 (Ω + 1)) (9)
où H est la hiérarchie de Hardy, ψ est une version étendue de l'OCF de Madore (nous l'expliquerons plus loin) et φ est la fonction de Veblen.
Essayez-le en ligne!
Ungolfed: (en utilisant des fonctions, pas des lambdas)
OCF étendu de Madore:
Et (grossièrement) la fonction phi de Veblen:
Explication sans ordinaux:
Mon programme commence
k = 9, h = [[],9,9]
. Il s’applique ensuitek = k*k
eth = f(h,k)
jusqu’àh == 0
et sortiesk
.Explication avec des ordinaux:
ψ '(ω ∙ α) (α), la fonction de compression ordinale décrite dans l'image ci-dessus.
Mon programme commence plus ou moins
k = 9
eth = Ω(↑9)9
, puis s'appliquek ← k²
eth ← h[k,h]
jusqu'àh = 1
et revientk
.Et donc, si je l'ai bien fait, il
[[],9,9]
est bien plus gros que l'ordinal de Bachmann-Howard ψ (Ω Ω Ω ... ), ce qui est bien plus grand que (Ω ω ω) +1.ψ (Ω (↓ 9) 9)> (Ω (4) 3)> (Ω Ω Ω ) +1> (Ω Ω ω ω ) +1> ϑ (Ω ω ω) +1
Et si mon analyse est correcte, alors nous devrions avoir '(Ω Ω ∙ x) ~ = ψ * (Ω Ω ∙ x), où * est la fonction psi de Madore normale. Si cela est vrai, alors mon ordinal est approximativement égal à ψ * ( 3 (Ω + ω)).
Old Ruby, 309 octets, H ψ ' 0 (Ω 9 ) (9) (voir l' historique des révisions , de plus le nouveau est bien meilleur)
la source
a.class!=Array
, la plupart idiomatiques est ,!a.is_a? Array
mais plus court que je peux penser esta!=[*a]
. Et les méthodes peuvent être converties en lambdas:f=->a,n=0,b=a{...}...f[x,y]
pour sauvegarder certains caractères et éventuellement ouvrir des possibilités de refactoring en les utilisant comme objets de première classe.Haskell, 252 octets, TREE (3) +1
Merci de l'aide de H.PWiz, Laikoni et Ørjan Johansen de nous aider à jouer au golf dans le code!
Comme suggéré par HyperNeutrino , mon programme génère les sorties TREE (3) +1, exactement (TREE est calculable à l’ avenir ).
T n c
est un arbre avec une étiquettec
et des noeudsn
.c
devrait être1
,2
ou3
.l t
est le nombre de nœuds dans un arbret
.t1 # t2
est vrai sit1
incorpore homéomorphiquement danst2
(basé sur la définition 4.4 ici ), et faux sinon.a n
affiche une grande liste d’arbres. La liste exacte n'est pas importante. La propriété importante est quea n
contient tous les arbres jusqu'àn
nœuds, avec des noeuds étant étiquetés avec1
,2
ou3
, et peut - être quelques arbres aussi bien (mais les autres arbres seront également marqués avec1
,2
ou3
). Il est également garanti de produire une liste finie.s n
liste toutes les séquences de longueurn
d'arbre, de sorte que l'inverse (puisque nous le construisons à l'envers) de cette séquence soit valide. Une séquence est valide si le nième élément (où nous commençons à compter à 1) a au plus n nœuds et qu’aucun arbre ne s’intègre de manière homogène dans un autre.main
imprime le plus petit den
telle sorte qu'il n'y ait pas de séquence valide de longueurn
.Puisque
TREE(3)
est défini comme la longueur de la plus longue séquence valide,TREE(3)+1
est la plus petite den
sorte qu'il n'y ait pas de séquence valide de longueurn
, ce que mon programme génère.la source
Python 2, 194 octets, ~ H (Ω Ω Ω ) (9)
où H est la hiérarchie de Hardy et ψ est la fonction d'effondrement ordinale au-dessous de l'ordinal de Bachmann-Howard défini par Pohlers.
Merci à Jonathan Frech pour -3 octets.
Essayez-le en ligne!
Version mieux espacée:
Explication:
Ce programme implémente une variante de l' hydre de Buchholz , en utilisant uniquement les étiquettes 0 et 1. En gros, à chaque étape, nous examinons le premier nœud feuille de l'arbre et voyons s'il est étiqueté avec un 0 ou un 1.
-Si le nœud feuille est étiqueté avec un 0, nous supprimons le nœud feuille, puis copions l’arborescence à partir du parent du nœud feuille c, toutes les copies connectées au grand-parent du nœud feuille.
-Si le nœud feuille est étiqueté avec un 1, alors nous cherchons en arrière vers la racine jusqu'à atteindre un nœud ancêtre étiqueté avec un 0. Soit S l'arborescence à partir de ce nœud ancêtre. Soit S 'avec le nœud feuille relabellé à 0. Remplacez le nœud feuille par S'.
Nous répétons ensuite le processus jusqu'à ce qu'il ne nous reste plus que le nœud racine.
Ce programme diffère de la procédure d'hydre normale de Buchholz de deux manières: Premièrement, après avoir exécuté la procédure ci-dessus, nous avons sauvegardé de nouveau l'arborescence et effectué la procédure de copie label 0 décrite ci-dessus pour chaque nœud ancêtre du nœud feuille d'origine. Cela augmente la taille de l'arbre, de sorte que notre procédure prendra plus de temps que l'hydre normale de Buchholz et conduira donc à un nombre plus important à la fin; cependant, il se terminera quand même car l'ordinal associé au nouvel arbre sera toujours moins l'ancien. L’autre différence est que, plutôt que de commencer par c = 1 et d’augmenter de 1 à chaque fois, nous commençons avec c = 9 et nous le corrigeons à chaque fois, car pourquoi pas.
L'arbre [[[1,1], 1], 0] correspond à l'ordinal ψ (Ω Ω Ω ), qui est considérablement plus grand que l'ordinal ϑ (Ω ω ω), et donc notre nombre final résultant d'environ H ψ (Ω Ω Ω ) (9) dépassera définitivement TREE (3).
la source
Ruby, 140 octets, ~ H (Ω Ω Ω ) (81)
où H est la hiérarchie de Hardy et ψ est la fonction de fusion ordinale standard sous l'ordinal de Bachmann-Howard, telle que définie ici .
Essayez-le en ligne!
Version non-golfée:
Ce programme implémente l'hydre de Buchholz avec des nœuds étiquetés avec les symboles [] et 1, comme décrit dans mon entrée Python 2.
L'arbre [[], [1, [1,1]]] correspond à l'ordinal (Ω Ω Ω ), qui est considérablement plus grand que l'ordinal (Ω ω ω) = (Ω Ω ω ω ), et donc notre nombre final résultant d'environ H H (Ω Ω Ω ) (81) dépassera TREE (3).
la source
u==0?v:u==[]?v
vous pouvez écrireu==0?||u[0]?v
, ce qui économise deux octets.Julia, 569 octets, numéro du chargeur
Pour me sauver un peu de travail, j'ai décidé de transférer Loader.c à Julia presque un pour un et de le compacter dans le bloc de code ci-dessus. Pour ceux qui veulent faire les comparaisons eux-mêmes (soit pour vérifier mes scores, soit pour m'aider à trouver des erreurs ou pour améliorer mon code), une version non golfée est ci-dessous:
Aucun compte précédent, car j’ai fait trop d’erreurs sur les octets dans le jeu agressif que j’ai fait.
la source
JavaScript, 190B, H ψ (ε Ω + 1 ) (9) Sur la base de cette analyse
Ce programme est une version modifiée de cette traduction de numéro de séquence de paires 225B en JavaScript . Pour le numéro de séquence de paires et leur code d'origine, voir ici .
Les modifications effectuées:
la source