El sistema de números ordinales es un sistema con números infinitos. Muchos números infinitos. Tantos números infinitos que literalmente no tiene un infinito para representar su propia infinitud. La imagen de arriba da una pequeña idea de cómo funcionan. Un número ordinal ( construcción de von Neumann ) es un conjunto de ordinales anteriores. Por ejemplo, 0 es el conjunto vacío, 1 es el conjunto {0}, 2 es el conjunto {0, 1} y etc. Luego llegamos a ω, que es {0, 1, 2, 3 ...}. ω + 1 es {0, 1, 2, 3 ... ω}, ω multiplicado por dos es {0, 1, 2 ... ω, ω + 1, ω + 2 ...} y sigues como ese.
Su programa generará un conjunto de ordinales, como {0, 1, 4}. Su puntaje será el menos ordinal más que todo el ordinal en su conjunto. Para {0, 1, 4} la puntuación sería 5. Para {0, 1, 2 ...}, la puntuación sería ω.
¿Cómo sacas tus ordinales que preguntas? Código por supuesto. Es decir, su programa generará una lista potencialmente infinita de otros programas, entre comillas, uno en cada línea (use la cadena literal "\ n" para representar nuevas líneas). Un programa corresponde a su puntaje como se indicó anteriormente. Por ejemplo, si saca
"A"
"B"
"C"
donde A, B y C son respuestas válidas y tienen puntajes {0, 1, 4}, el puntaje de su programa sería 5. Tenga en cuenta que A, B y C deben ser programas completos, no fragmentos.
Según las reglas anteriores, un programa que no genera nada tiene una puntuación de 0 (el menor ordinal mayor que todos {} es 0). Además, recuerde que un conjunto no puede contenerse, a través del axioma de la fundación . Es decir, cada conjunto (y, por lo tanto, ordinal) tiene una ruta de acceso a cero. Esto significa que un quine completo sería inválido ya que no es un conjunto.
Además, ningún programa puede acceder a recursos externos (su propio archivo, Internet, etc.). Además, cuando enumere su puntaje, coloque la forma normal de puntaje junto a él si aún no está en forma normal, si puede (si no, alguien más puede).
Después de tener en cuenta todo lo anterior, la respuesta real que publique debe ser inferior a 1,000,000 bytes (sin contar los comentarios). (Este límite superior probablemente solo entrará en juego para el código generado automáticamente). Además, puede aumentar su puntaje por cada byte que no use (dado que estamos tratando con infinitos, esto probablemente solo se tendrá en cuenta cuando los ordinales estén muy cerca o lo mismo). Una vez más, este párrafo solo se aplica a la respuesta publicada, no a las generadas, o las que generan, y así sucesivamente.
Esto tiene la etiqueta quine, porque puede ser útil generar al menos parte del código propio de las fuentes, para usar en la creación de ordinales grandes. Sin embargo, de ninguna manera es obligatorio (por ejemplo, un envío con puntaje 5 probablemente no necesitaría su propio código fuente).
Para un ejemplo resuelto y anotado, vea aquí .
fuente
Respuestas:
Haskell: ψ (Ω Ω ω ) + 999672 puntos
329 bytes de código con ordinal ψ (Ω Ω ω ) + 1. Utiliza una representación en árbol de ordinales descubiertos por Jervell (2005) . El árbol con hijos α , β , ..., γ se denota
α :@ (β :@ (… :@ (γ :@ Z)…))
. Este orden de izquierda a derecha está de acuerdo con Jervell, aunque tenga en cuenta que Madore lo cambia de derecha a izquierda.Haskell: Γ 0 + 999777 puntos
224 bytes de código con ordinal Γ 0 + 1. Esto se basa en una generalización del gusano de Beklemishev a elementos de valor ordinal, que son representados recursivamente por gusanos.
Haskell: ε 0 + 999853 puntos
148 bytes de código con ordinal ε 0 + 1. Esto se basa en el gusano de Beklemishev . La lista
representa el ordinal (ω gamma + ⋯ + ω ß + ω alpha ) - 1. Por lo tanto las salidas de segundo nivel
[0]
,[1]
,[2]
,[3]
, ... representan 1, ω, ω ω , ω ω ω , ..., la salida del primer nivel representa ε 0 , y el programa inicial representa ε 0 + 1.Haskell: ε 0 + 999807 puntos
194 bytes de código con ordinal ε 0 + 1.
Z
representa 0, y podemos demostrar por inducción transfinita en α , luego en β , queα :@ β
≥ ω α + β . Así que hay salidas de segundo nivel al menos tan grande como cualquier torre omega omega ⋰ omega , que significa que la salida de primer nivel es al menos ε 0 y el programa inicial es al menos ε 0 + 1.fuente
Rubí, ψ 0 (ψ X (ψ M + 1 (Ω M + 1 Ω M + 1 )) (0)) + 999663 puntos
Suponiendo que entiendo mi programa correctamente, mi puntaje es ψ 0 (ψ X (ψ M + 1 (Ω M + 1 Ω M + 1 )) (0)) + 999663 puntos donde ψ es una función de colapso ordinal, X es el chi función (función de colapso de Mahlo), y M es el primer 'ordinal' de Mahlo.
Este programa es una extensión de la que escribí en Golf, un número mayor que TREE (3) y supera por completo a todas las otras soluciones aquí por ahora.
Pruébalo en línea!
Rubí, ψ 0 (ψ I (I I )) + 999674 puntos
Pruébalo en línea! (advertencia: no hará mucho, ya que claramente
(0..1.0/0).map{...}
no puede terminar. Es así como también imprimo infinitos programas).Rubí, ψ 0 (ψ I (0)) + 999697 puntos
Pruébalo en línea!
Un programa de prueba más razonable que implementa en su
(0..5).map{...}
lugar:Pruébalo en línea!
Desafortunadamente, incluso con
(1..1).map{...}
, encontrará que este programa requiere mucha memoria. Quiero decir, la longitud de la salida excede cosas como SCG (13).Al usar el programa más simple, podemos considerar algunos valores:
Pruébalo en línea!
Básicamente imprime el mismo programa repetidamente, en el formato de:
donde el inicializado
x
registra el ordinal con el que se relaciona el programa, y la"..."
retención de los programas después de quex
se ha reducido. Six==0
, entonces imprimeque es un programa que no imprime nada con una puntuación de cero, por lo tanto
tiene una puntuación de 1 y
tiene una puntuación de 2 y
tiene un puntaje de 3, etc., y mi programa original imprime estos programas en el formato
¿Dónde
...
están los programas mencionados anteriormente?Mi programa actual realmente imprime estos programas en el formato
Infinitamente muchas veces, y para valores como
ω
, hace algo similar aY así, el puntaje del programa
es
1+some_ordinal
, y la puntuación dees
1+some_ordinal+1
, y la puntuación dees
1+some_ordinal+2
.Explicación de ordinales:
f[a,n,b]
Reduce un ordinala
.Cada número natural se reduce al número natural debajo de él.
[c,0,e]
es el sucesor dec
, y siempre se reduce ac
.[c,d,e]
Es una hiperoperación asociativa hacia atrás, se reduce de la siguiente manera:[0]
es el primer ordinal infinito (equivalente a ω) y se reduce de la siguiente manera:[c]
es el cth omega ordinal y se reduce de la siguiente manera:[c,d]
es ψ d (c) y se reduce de la siguiente manera:[c,d,e,0]
es básicamente lo mismo que[c,d,e]
, excepto que enumera la operación en[c]
lugar de la operación sucesora.fuente
I
es el ordinal que se relaciona con el primer cardenal inaccesible, así como ω se relaciona con aleph null.Java + Brainf ***, ω + 999180 puntos
Un programa de Java que produce infinitos programas Brainf ***, cada uno de los cuales produce el último como salida.
¿Por qué? Porque puedo.
Cualquier mejora en la parte de generación Brainf *** es definitivamente bienvenida.
fuente
*
como carácter comodín, por lo que sólo tiene que escribirbrainf***
, obrainf
. Todas esas variaciones aparecen en los resultados de búsqueda. codegolf.stackexchange.com/help/searchingAlfabetizado Haskell (GHC 7.10): ω² + 999686 puntos.
Esto servirá como una respuesta de ejemplo. Como es un ejemplo, solo tiene sentido usar programación alfabetizada . Sin embargo, no puntuará bien Los pajaritos disminuirán mi puntaje, pero bueno. Primero, hagamos una función auxiliar s. Si x es un ordinal, sx = x + 1, pero encontramos usos inesperados de s.
La función show afortunadamente hace toda la desinfección de cadenas por nosotros. También vale la pena hacer 0. Zero no es el sucesor de nada, pero s "" será igual a "main = putStrLn" "", que es igual a 0.
Ahora haremos una función que tome n y devuelva ω * n.
Funciona haciendo ω * n por {ω * (n-1), ω * (n-1) +1, ω * (n-1) +2, ...}. ¿Qué es esto q? Por qué, es la razón por la que tenemos una etiqueta quine . q son las funciones de ayuda anteriores hasta ahora.
Tenga en cuenta que solo en las necesidades q, no en ninguno de sus sucesores (s (o (n)), s (s (o (n)))), ya que no necesitan las funciones auxiliares (excepto indirectamente de o n). Ahora solo tenemos que generar todos ω * n para n finito.
Aquí vamos. 2 ^ 2 Habiendo usado solo el código 314, reclamo un bono final de 999686, lo que me da un puntaje final de ω ^ 2 + 999686, que ya está en la forma normal de cantor.
Primeras cuatro líneas de salida (0, ω, ω * 2, ω * 3):
fuente
GolfScript, ε₀ + 1 + 999537 puntos
Probablemente puede ser mejor, pero me volví demasiado vago para depurar y probar ordinales más grandes.
Ordenales más pequeños
fuente
Javascript (Nashorn), ω2 + 999807 puntos
Nashorn es el motor Javascript que viene integrado en Java. Esto también puede funcionar en Rhino, pero aún no lo he probado en eso.
fuente