Algunos de ustedes pueden estar familiarizados con el BigNum Bakeoff , que terminó de manera bastante interesante. El objetivo puede resumirse más o menos como escribir un programa en C cuya producción sería la más grande, bajo algunas restricciones y condiciones teóricas, por ejemplo, una computadora que podría ejecutar el programa.
En el mismo espíritu, estoy planteando un desafío similar abierto a todos los idiomas. Las condiciones son:
Máximo 512 bytes .
El resultado final debe imprimirse en STDOUT. Este es tu puntaje. Si se imprimen varios enteros, se concatenarán.
La salida debe ser un número entero. (Nota: Infinity no es un número entero ).
No hay constantes incorporadas mayores de 10, pero los números / dígitos están bien (por ejemplo, la constante de Avogadro (como una constante incorporada) no es válida, pero 10000 no lo es).
El programa debe finalizar cuando se proporcionan recursos suficientes para ejecutarse.
La salida impresa debe ser determinista cuando se proporcionan recursos suficientes para ejecutarse.
Se le proporcionan enteros o bigints suficientemente grandes para que su programa se ejecute. Por ejemplo, si su programa requiere la aplicación de operaciones básicas a números menores de 10 1,000,000 , entonces puede suponer que la computadora que ejecuta esto puede manejar números de al menos hasta 10 1,000,000 . (Nota: Su programa también puede ejecutarse en una computadora que maneja números de hasta 10 2,000,000 , por lo que simplemente llamar al número entero máximo que la computadora puede manejar no dará resultados deterministas).
Se le proporciona suficiente potencia informática para que su programa termine de ejecutarse en menos de 5 segundos. (Por lo tanto, no se preocupe si su programa ha estado ejecutándose durante una hora en su computadora y no va a terminar pronto).
Sin recursos externos, así que no piense en importar esa función de Ackermann a menos que sea una función integrada.
Todos los artículos mágicos están siendo prestados temporalmente de una deidad generosa.
Extremadamente grande con límite desconocido.
- Steven H , Pyth f 3 + B³F + ω² (256 26 )
donde B³F es el ordinal Iglesia-Kleene con la secuencia fundamental de
B³F[n] = B³F(n), the Busy Beaver BrainF*** variant
B³F[x] = x, ω ≤ x < B³F
Tabla de clasificación:
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 )
Simply Beautiful Art , Ruby f ω + 35 (9 9 99 )
i .. , Python 2 , f 3 (f 3 (141))
Algunas notas al margen:
Si no podemos verificar su puntaje, no podemos ponerlo en la tabla de clasificación. Por lo tanto, puede esperar explicar un poco su programa.
Del mismo modo, si no comprende qué tan grande es su número, explique su programa e intentaremos resolverlo.
Si utiliza un tipo de programa de número de Loader , lo ubicaré en una categoría separada llamada "Extremadamente grande con límite desconocido" , ya que el número de Loader no tiene un límite superior no trivial en términos de la jerarquía de rápido crecimiento para ' secuencias fundamentales estándar.
Los números se clasificarán a través de la jerarquía de rápido crecimiento .
Para aquellos que deseen aprender cómo usar la jerarquía de rápido crecimiento para aproximar números realmente grandes, estoy alojando un servidor Discord solo para eso. También hay una sala de chat: Ordinality .
Desafíos similares:
Golf un número más grande que el ÁRBOL (3)
Programa de finalización más corto cuyo tamaño de salida excede el número de Graham
Para aquellos que desean ver algunos programas simples que generan la jerarquía de rápido crecimiento para valores pequeños, aquí están:
Ruby: jerarquía de rápido crecimiento
#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.
Para ir de f_x
a f_(x+1)
, agregamos un bucle de n.times{...}
.
De lo contrario, estamos diagonalizando contra todos los anteriores, por ejemplo
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.
fuente
Respuestas:
Rubí, f ψ 0 (X (Ω M + X (Ω M + 1 Ω M + 1 ) )) + 29 (9 9 9 )
donde M es el primer 'ordinal' de Mahlo, X es la función chi (función de colapso de Mahlo) y ψ es la función de colapso ordinal.
Pruébalo en línea!
Desglose de código:
Desglose matemático:
f
reducea
basado enn,b,q
.La idea básica es tener un anidado extremadamente
a
y reducirlo repetidamente hasta que se reduzca aa=0
. Por simplicidad, dejemosPor ahora, solo preocupémonos
n
.Para cualquier número entero
k
, obtenemosf[k,n]=k-1
, así podemos ver queTenemos entonces que, para cualquier
d
,f[[0,d],n]=n
para que podamos ver queTenemos entonces que, para cualquier
c,d,e
,f[[c,0,e],n]=f[[c,d,0],n]=c
. Por ejemplo,Tenemos entonces que, para cualquier
c,d,e
tal que no caiga en el caso anterior,f[[c,d,e],n]=[[c,d,f[e,n]],f[d,n],e]
. Aquí es donde comienza a complicarse. Algunos ejemplos:Aumenta rápidamente desde allí. Algunos puntos de interes:
Finalmente, la introducción de más argumentos de la
f
función, así como más casos para la matriz, nos permite superar las notaciones computables más nombradas. Algunos particularmente conocidos:fuente
Pyth, f ψ (Ω Ω ) + ω 2 +183 (~ 256 27! )
Requiere cualquier entrada no vacía, pero su valor no se utiliza.
Explicación (para la versión nueva y de puntuación razonable ):
Es muy difícil para mí calcular el tamaño de esto, principalmente porque
es tarde en el día y no estoy muy familiarizado con las jerarquías de rápido crecimiento o cómo trataría de averiguar cuántas veces Q pasa por el proceso.Si bien ahora sé más sobre los ordinales, todavía no tengo idea de cómo calcular el valor del ordinal representado por la definición recursiva en mi programa. Me uniría al servidor Discord, pero bajo un seudónimo preferiría no estar vinculado a mi nombre real.y()
escurridor.Desafortunadamente, debido a que sé relativamente poco sobre dichas jerarquías de rápido crecimiento, es probable que ya haya perdido la respuesta de Ruby. Es difícil para mí decirlo.Puede que haya superado la respuesta de Ruby, pero no estoy 100% seguro.¯ \ _ (ツ) _ / ¯fuente
27^^^27^^27^^4
, of<sub>4</sub>(27^^27^^4)) ≈ f<sub>4</sub>(f<sub>3</sub>(f<sub>3</sub>(19)))
.y
recurse para operar eny(Q-1)
lugar de operar soloQ
. ¿Cómo afecta esto al puntaje?y(Q) = L(y(Q-1))
Per se?Pyth, f 3 + σ -1 + ω 2 (256 26 )
Donde σ m [n] es la Busy Beaver función Σ de orden
m
llamada enn
: σ m [n] = Σ m (n). El orden-1
es denotar que el Busy Beaver aquí no se llama en una verdadera máquina de Turing, sino más bien una aproximación con una cinta deQ
elementos de envoltura finita . Esto permite que el problema de detención sea solucionable para estos programas.El TL; DR es que esto crea todos los posibles programas BrainF ** k de longitud Q, los ejecuta en un entorno donde el valor máximo de un número entero es Q y la longitud de la cinta es Q, y compila todos los estados de estas operaciones juntos para agregue (ese es el
3+
) a Q, repitiendo lo anterior en una escala de f ω 2 .Todavía tengo ~ la mitad de los personajes con los que trabajar si quisiera hacer algo más, pero hasta que descubramos dónde está, lo dejaré como está.
fuente
python, f 3 (f 3 (141)), 512 bytes
Esta no es realmente una respuesta válida, pero quería publicarla de todos modos. Un resumen rápido:
De todos modos, no sé si esta respuesta es técnicamente legal, pero fue divertido escribirla. Siéntase libre de editar cualquier error que encuentre en el código.
fuente
for j in range(f(x)): for j in range(f(x)): x = f(x)
embargo, obtendría un número mucho mayor al anidar . ¡Únete a nosotros en el chat para discutir por qué!Ruby, probablemente ~ f ω + 35 (9 9 99 )
Pruébalo en línea!
Explicación matemática aproximada:
El siguiente es aproximadamente igual al programa anterior, pero simplificado para que sea más fácil de entender.
G(0,k) = k
Es nuestra función base.Para evaluar
G(n,k)
, lo tomamosk
y lo escribimos comoG(n-1,1) + ... + G(n-2,1) + ... + G(0,1)
.Luego cambie todas las
G(x,1)
's enG(x,2)
' s y reste1
del resultado completo.Vuelva a escribirlo en la forma anterior usando
G(x,2)
, dondex<n
, y deje el resto al final. Repetir, cambiarG(x,2)
aG(x,3)
, etc.Cuando llegue el resultado
-1
, devuelve la base (lab
que estaría enG(x,b)
).Ejemplos:
G (1,1):
G (1,2):
G (1,3):
G (2,5):
Haciendo algunos cálculos, descubrí que
Y más allá de eso, tiende a ponerse un poco peludo.
En general, tenemos
fuente
Python 3, f ω ω + ω * ω (9 9 9 99 )
Tendré una explicación pronto.
fuente
Python 3 , ~ f ε 0 (9 9 9 )
Pruébalo en línea!
fuente
Python 3, 323 bytes, g 9e9 (9)
Pruébalo en línea!
Explicación
Python 3 es un lenguaje verdaderamente recursivo, esto significa que una función no solo puede llamarse a sí misma, sino que también puede tomar otras funciones como funciones de entrada o salida. El uso de funciones para mejorar es en lo que se basa mi programa.
f = lambda x, a: [a (x), e (x) ((x, a)) [1]]
Definición
Definición explicada
a(x)=9^x
a es la función base, elegí esta función porque x> 0 => a (x)> x` que evita puntos fijos.b(x,f)=a(x), f^x
b es la función de mejora general, toma cualquier función y genera una mejor versión de la misma. b incluso se puede aplicar a sí mismo:b(x,b)[1]=b^x
b(x,b^x)[1]=b^(x*x)
pero para usar completamente el poder de
b
mejorarb
necesita tomar la salida de b y usarla como la nueva b, esto es lo que hace c0:c0(…,f)=f(…,f)
c0(x,b^x)=b^x(x,b^x)[1]>b^(9↑↑x)
la función c (n) más general toma el último argumento n (comenzando desde 0) so
c(1)(…,f,a)=f(…,f,a)
yc(2)(…,f,a,b)=f(…,f,a,b)
.*l
significa que l es una matriz yl[~n]
toma el último argumento nd(x,b,c,*l)=a(x), c0(x,b), b(x,c0), b(x,f) for f in l
d usa c0 para actualizar byb para actualizar todas las demás funciones de entrada (de las cuales puede haber cualquier cantidad debido a la lista)d(x,b,c,d)>9^x,b^x,c^x,d^x
yd²(x,b,c,d)>a²(x), b^(9↑↑x), c^(9↑↑x), d^(9↑↑x)
pero d se pone aún mejor si lo combinas con 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)=…
cuanto más c (x) agregue al final, más poderoso se vuelve. El primer c0 siempre permanece 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)=…
pero el segundo deja versiones iteradas:
Cuando
d^x
finalmente se calculac4
tomará una versión mucho más iterada ded
la próxima vez. Cuandoc4^x
finalmente se calculac3
tomará una versión mucho más iterada dec4
...Esto crea una versión realmente potente de iteración porque
d
:b
usoc0
c0
usob
b
Las mejoras mejoran, esto significa que d se vuelve más poderoso cuando se itera más.Crear esta larga cadena de c es lo que
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]
hace.Se usa
c0^x
para evitar esoc0
que simplemente daríad
.Esto
[1]
significa que eventualmente devolverá la segunda salida ded^…
. Por lo tantob^…
.En este punto, no podía pensar en nada que hacer con e (x) para aumentar significativamente su salida, excepto aumentar la entrada.
Entonces
f(x,a)=a(x),e(a(x))(x,a)[1](x)
usa elb^…
generado pore(x)
para generar una mejor función base y usa esa función base para llamare(x)
con una entrada más grande.g(x)=e(x)(x,f)[1](x,a)[1](x)
usa un finale(x)
para anidarf
y produce una función realmente poderosa.Aproximación fgh
Necesitaré ayuda para aproximar este número con cualquier tipo de fgh.
Versión anterior : f ω ω 6 (f ω ω 5 (9e999)), ¡ Pruébelo en línea! Historial de revisión de explicación
fuente
f_1(x) = x+x
pero a la larga, esto no importa demasiado.x*x
.a2(f_n)~=f_{n+1}
Ruby, f ε 0 2 (5), 271 bytes
Pruébalo en línea!
Esto se basa en el mapa m (n) .
Explicación:
m[0][f0][k] = f0[f0[...f0[k]...]]
conk
iteraciones def0
.m[1][f0][f1][k] = f0[f0[...f0[f1]...]][k]
conk
iteraciones def0
.m[2][f0][f1][f2][k] = f0[f0[...f0[f1]...]][f2][k]
conk
iteraciones def0
.En general,
m[n]
toma enn+2
argumentos, itera el primer argumento,f0
,k
veces sobre el segundo argumento, y luego se aplica la función resultante sobre el tercer argumento (si existe), a continuación, se aplica la función resultante en el cuarto argumento (si existe), etc.Ejemplos
m[0][n↦n+1][3] = (((3+1)+1)+1 = 6
En general
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 general
m[0][m[0][n↦n+1]] = n↦n*2^n
,.En general,
m[1][m[0]][n↦n+1] = f_ω
en la jerarquía de rápido crecimiento.y el resultado final es
fuente