Le système de nombres ordinaux est un système avec des nombres infinis. Beaucoup de nombres infinis. Tant de nombres infinis qu'il n'a littéralement pas d'infini pour représenter sa propre infinité. L'image ci-dessus donne une petite idée de leur fonctionnement. Un nombre ordinal ( construction de Von Neumann ) est un ensemble d'ordinaux précédents. Par exemple, 0 est l'ensemble vide, 1 est l'ensemble {0}, 2 est l'ensemble {0, 1} et etc. Ensuite, nous arrivons à ω, qui est {0, 1, 2, 3 ...}. ω + 1 est {0, 1, 2, 3 ... ω}, ω fois deux est {0, 1, 2 ... ω, ω + 1, ω + 2 ...} et vous continuez comme cette.
Votre programme affichera un ensemble d'ordinaux, tels que {0, 1, 4}. Votre score sera alors le moins ordinal plus que tous les ordinaux de votre set. Pour {0, 1, 4}, le score serait 5. Pour {0, 1, 2 ...}, le score serait ω.
Comment sortez-vous vos ordinaux que vous demandez. Code bien sûr. À savoir, votre programme affichera une liste potentiellement infinie d'autres programmes, entre guillemets, un sur chaque ligne (utilisez la chaîne littérale "\ n" pour représenter les nouvelles lignes). Un programme correspond à son score comme indiqué ci-dessus. Par exemple, si vous sortez
"A"
"B"
"C"
où A, B et C sont eux-mêmes des réponses valides et ont des scores {0, 1, 4}, le score de votre programme serait 5. Notez que A, B et C doivent être des programmes complets, pas des fragments.
Sur la base des règles ci-dessus, un programme qui ne produit rien a un score de 0 (le moins ordinal supérieur à tous {} est 0). Souvenez-vous également qu'un ensemble ne peut pas se contenir lui-même, via l' axiome de fondation . A savoir, chaque ensemble (et donc ordinal) a un chemin vers zéro. Cela signifie qu'un quine complet serait invalide car ce n'est pas un ensemble.
De plus, aucun programme n'est autorisé à accéder à des ressources externes (son propre fichier, Internet etc ...). De plus, lorsque vous listez votre score, mettez la forme normale du cantor à côté si elle n'est pas déjà sous la forme normale du cantor, si vous le pouvez (sinon, quelqu'un d'autre peut le faire).
Après avoir pris en compte tout ce qui précède, la réponse réelle que vous publiez doit être inférieure à 1 000 000 octets (sans compter les commentaires). (Cette limite supérieure n'entrera probablement en jeu que pour le code généré automatiquement). De plus, vous pouvez incrémenter votre score pour chaque octet que vous n'utilisez pas (car nous avons affaire à des infinis, cela ne sera probablement pris en compte que lorsque les ordinaux sont très proches ou identiques). Encore une fois, ce paragraphe s'applique uniquement à la réponse publiée, pas aux réponses générées, ni à celles générées par les réponses générées, etc.
Celui-ci a la balise quine, car il peut être utile de générer au moins une partie du code propre des sources, pour une utilisation dans la fabrication de grandes ordinales. Ce n'est en aucun cas requis (par exemple, une soumission avec un score de 5 n'aurait probablement pas besoin de son propre code source).
Pour un exemple élaboré et annoté, voir ici .
la source
Réponses:
Haskell: ψ (Ω Ω ω ) + 999672 points
329 octets de code avec l'ordinal ψ (Ω Ω ω ) + 1. Utilise une représentation arborescente des ordinaux découverte par Jervell (2005) . L'arbre avec les enfants α , β ,…, γ est noté
α :@ (β :@ (… :@ (γ :@ Z)…))
. Cet ordre de gauche à droite est d'accord avec Jervell, bien que notez que Madore le retourne de droite à gauche.Haskell: Γ 0 + 999777 points
224 octets de code avec l'ordinal Γ 0 + 1. Ceci est basé sur une généralisation du ver de Beklemishev aux éléments à valeur ordinale, qui sont eux-mêmes représentés récursivement par des vers.
Haskell: ε 0 + 999853 points
148 octets de code avec l'ordinal ε 0 + 1. Ceci est basé sur le ver de Beklemishev . La liste
représente l'ordinal (ω la y + ⋯ + ω la ß + ω alpha ) - 1. Donc , les sorties de second niveau
[0]
,[1]
,[2]
,[3]
, ... représentent 1, ω, ω ω , ω ω ω , ..., la sortie de premier niveau représente ε 0 , et le programme initial représente ε 0 + 1.Haskell: ε 0 + 999807 points
194 octets de code avec l'ordinal ε 0 + 1.
Z
représente 0, et on peut prouver par induction transfinie sur α , puis sur β , queα :@ β
≥ ω α + β . Il y a donc des sorties de deuxième niveau au moins aussi grandes que n'importe quelle tour ω ω ⋰ ω , ce qui signifie que la sortie de premier niveau est au moins ε 0 et que le programme initial est au moins ε 0 + 1.la source
Rubis, ψ 0 (ψ X (ψ M + 1 (Ω M + 1 Ω M + 1 )) (0)) + 999663 points
En supposant que je comprends bien mon programme, mon score est ψ 0 (ψ X (ψ M + 1 (Ω M + 1 Ω M + 1 )) (0)) + 999663 points où ψ est une fonction de regroupement ordinale, X est le chi (fonction d'effondrement de Mahlo), et M est le premier «ordinal» de Mahlo.
Ce programme est une extension de celui que j'ai écrit sur Golf, un nombre plus grand que TREE (3) et l' emporte complètement sur toutes les autres solutions ici pour l'instant.
Essayez-le en ligne!
Rubis, ψ 0 (ψ I (I I )) + 999674 points
Essayez-le en ligne! (avertissement: cela ne fera pas grand-chose, car il ne
(0..1.0/0).map{...}
peut clairement pas se terminer. C'est ainsi que j'imprime également une infinité de programmes.)Rubis, ψ 0 (ψ I (0)) + 999697 points
Essayez-le en ligne!
Un programme de test plus raisonnable qui implémente à la
(0..5).map{...}
place:Essayez-le en ligne!
Malheureusement, même avec
(1..1).map{...}
, vous trouverez que ce programme est extrêmement gourmand en mémoire. Je veux dire, la longueur de la sortie dépasse des choses comme SCG (13).En utilisant le programme plus simple, nous pouvons considérer quelques valeurs:
Essayez-le en ligne!
Il imprime essentiellement le même programme à plusieurs reprises, au format:
où l'initialisation
x
enregistre l'ordinal auquel le programme est lié, et la"..."
détient les programmes aprèsx
a été réduite. Six==0
, alors il imprimequi est un programme qui n'imprime rien avec un score de zéro, d'où
a un score de 1, et
a un score de 2, et
a un score de 3, etc., et mon programme d'origine imprime ces programmes au format
où
...
sont les programmes énumérés ci-dessus.Mon programme réel imprime ces programmes au format
Infiniment de fois, et pour des valeurs telles que
ω
, cela fait quelque chose de semblable àEt donc, le score du programme
est
1+some_ordinal
, et le score deest
1+some_ordinal+1
, et le score deest
1+some_ordinal+2
.Explication des ordinaux:
f[a,n,b]
réduit un ordinala
.Chaque nombre naturel se réduit au nombre naturel en dessous.
[c,0,e]
est le successeur dec
, et il se réduit toujours àc
.[c,d,e]
est une hyperopération associative à l'envers, se réduit comme suit:[0]
est le premier ordinal infini (équivalent à ω) et se réduit comme suit:[c]
est le cième oméga ordinal et se réduit comme suit:[c,d]
est ψ d (c) et se réduit comme suit:[c,d,e,0]
est fondamentalement le même que[c,d,e]
, sauf qu'il énumère l'opération[c]
au lieu de l'opération qui lui succède.la source
I
c'est l'ordinal qui se rapporte au premier cardinal inaccessible, tout comme ω se rapporte à aleph null.Java + Brainf ***, ω + 999180 points
Un programme java qui produit une infinité de programmes Brainf ***, dont chacun produit le dernier en sortie.
Pourquoi? Parce que je peux.
Toute amélioration de la partie génération Brainf *** est certainement la bienvenue.
la source
*
comme caractère générique, il suffit donc de taperbrainf***
oubrainf
. Toutes ces variations apparaissent dans les résultats de recherche. codegolf.stackexchange.com/help/searchingAlphabétisé Haskell (GHC 7.10): ω² + 999686 points.
Cela servira d'exemple de réponse. Étant donné que c'est un exemple, il est logique d'utiliser une programmation alphabétisée . Cela ne marquera pas bien cependant. Les birdies diminueront mon score, mais bon. D'abord, faisons une fonction d'aide s. Si x est un ordinal, sx = x + 1, mais nous trouvons des utilisations inattendues de s.
La fonction show fait heureusement toute la désinfection des cordes pour nous. Cela vaut également la peine de faire 0. Zéro n'est le successeur de rien, mais s "" sera égal à "main = putStrLn" "", ce qui équivaut à 0.
Nous allons maintenant créer une fonction qui prend n et renvoie ω * n.
Il fonctionne en faisant ω * n par {ω * (n-1), ω * (n-1) +1, ω * (n-1) +2, ...}. Quel est ce q? Pourquoi, c'est la raison pour laquelle nous avons une balise quine . q est les fonctions d'assistance ci-dessus jusqu'à présent.
Notez que seulement sur les besoins q, aucun de ses successeurs (s (o (n)), s (s (o (n)))), car ils n'ont pas besoin des fonctions d'assistance (sauf indirectement à partir de o n.) Il ne nous reste plus qu'à sortir tout ω * n pour n fini.
Et voilà. ω ^ 2 N'ayant utilisé que 314 caractères de code, je réclame un bonus final de 999686, ce qui me donne un score final de ω ^ 2 + 999686, qui est déjà sous la forme normale de Cantor.
Quatre premières lignes de sortie (0, ω, ω * 2, ω * 3):
la source
GolfScript, ε₀ + 1 + 999537 points
Cela peut probablement être mieux, mais je suis devenu trop paresseux pour déboguer et prouver des ordinaux plus gros.
Petits ordinaux
la source
Javascript (Nashorn), ω2 + 999807 points
Nashorn est le moteur Javascript intégré à Java. Cela peut également fonctionner dans Rhino, mais je ne l'ai pas encore testé dans cela.
la source