Su objetivo es escribir un programa que imprima un número. Cuanto mayor sea el número, más puntos obtendrás. ¡Pero ten cuidado! La longitud del código es limitada y muy ponderada en la función de puntuación. Su número impreso se dividirá por el cubo de la cantidad de bytes que utilizó para su solución .
Entonces, digamos que imprimiste 10000000
y tu código tiene una 100
longitud de bytes. Tu puntaje final será 10000000 / 100^3 = 10
.
Hay otras reglas a seguir, para hacer este desafío un poco más difícil.
- No puede usar dígitos en su código (0123456789);
- Usted puede utilizar matemática / física / etc. constantes, pero solo si son inferiores a 10. (por ejemplo, puede usar Pi ~ = 3.14 pero no puede usar la constante de Avogadro = 6e23)
- La recursión está permitida pero el número generado debe ser finito (por lo que infinito no se acepta como solución. Su programa debe terminar correctamente, suponiendo tiempo y memoria ilimitados, y generar la salida solicitada);
- No puede usar las operaciones
*
(multiplicar),/
(dividir),^
(potencia) ni ninguna otra forma de indicarlas (por ejemplo,2 div 2
no está permitido); - Su programa puede generar más de un número, si lo necesita para hacerlo . Solo el más alto contará para anotar;
- Sin embargo, puede concatenar cadenas: esto significa que cualquier secuencia de dígitos adyacentes se considerará como un solo número;
- Su código se ejecutará tal cual. Esto significa que el usuario final no puede editar ninguna línea de código, ni puede ingresar un número o cualquier otra cosa;
- La longitud máxima del código es de 100 bytes.
Tabla de clasificación
- Steven H. , Pyth ≈ f φ (1,0,0) +7 (256 26 ) / 1000000 [1]
- Arte simplemente hermoso , rubí ≈ f φ 121 (ω) (126) [1]
- Peter Taylor , GolfScript ≈ f ε 0 + ω + 1 (17) / 1000 [1]
- res , GolfScript ≈ f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (126))))))))) [1]
- Arte simplemente hermoso , Ruby ≈ f ω ω2 +1 (1983)
- eaglgenes101 , Julia ≈ f ω3 (127)
- col6y , Python 3, ≈ (127 → 126 → ... → 2 → 1) / 99 3 [1] [3]
- Toeofdoom , Haskell, ≈ a 20 (1) / 99 3 [1]
- Fraxtil , cc, ≈ 15 ↑ ¹⁶⁶⁶⁶⁶⁵ 15/100 3 [3]
- Magenta , Python, ≈ ack (126,126) / 100 3 ≈ 10 ↑ 124 129
- Kendall Frey , ECMAScript 6, ≈ 10 3 ↑ 4 3 /100 3 [1]
- Ilmari Karonen , GolfScript, ≈ 10 ↑ 3 10 377 /18 3 [1]
- BlackCap , Haskell, ≈ 10 ↑↑ 65503/100 3
- recursivo , Python, ≈ 2 ↑↑ 11/95 3 ≈ 10 ↑↑ 8.63297 [1] [3]
- nm , Haskell, ≈ 2 ↑↑ 7/100 3 ≈ 10 ↑↑ 4.63297 [1]
- David guiñada , C, ≈ 10 10 4 × 10 22 /83 3 ≈ 10 ↑↑ 4,11821 [2]
- primo , Perl, ≈ 10 (12750684.161 mil!) 5 × 2 27 /100 3 ≈ 10 ↑↑ 4.11369
- Arte , C, ≈ 10 10 2 × 10 6 /98 3 ≈ 10 ↑↑ 3.80587
- Robert Sørlie , x86, ≈ 10 2 2 19 +32 / 100 3 ≈ 10 ↑↑ 3.71585
- Tobia , APL, ≈ 10 10 353 /100 3 ≈ 10 ↑↑ 3.40616
- Darren Stone , C, ≈ 10 10 97.61735 / 98 3 ≈ 10 ↑↑ 3.29875
- ecksemmess , C, ≈ 10 2 320 /100 3 ≈ 10 ↑↑ 3.29749
- Adam Speight , vb.net, ≈ 10 5,000 × (2 64 ) 4 /100 3 ≈ 10 ↑↑ 3.28039
- Joshua , golpe, ≈ 10 10 15 /86 3 ≈ 10 ↑↑ 3.07282
Notas al pie
- Si todos los electrones en el universo fueran un qubit, y cada superposición de los mismos se pudiera usar de manera lucrativa para almacenar información (lo cual, siempre y cuando no necesite saber qué se está almacenando es teóricamente posible), este programa requiere más memoria de la que podría posiblemente exista, y por lo tanto no se puede ejecutar, ahora, o en cualquier punto concebible en el futuro. Si el autor pretendía imprimir un valor mayor que ≈3 ↑↑ 3.28 de una vez, se aplica esta condición.
- Este programa requiere más memoria de la que existe actualmente, pero no tanto que, en teoría, no podría almacenarse en un número escaso de qubits, y por lo tanto, algún día puede existir una computadora que pueda ejecutar este programa.
- Todos los intérpretes disponibles actualmente emiten un error de tiempo de ejecución, o el programa no puede ejecutarse como el autor pretendía.
- Ejecutar este programa causará daños irreparables a su sistema.
Editar @primo : he actualizado una parte del marcador utilizando una notación que es más fácil de comparar, con decimales para denotar la distancia logarítmica a la siguiente potencia más alta. Por ejemplo 10 ↑↑ 2.5 = 10 10 √10 . También he cambiado algunos puntajes si creía que el análisis del usuario era defectuoso, no dude en disputar cualquiera de estos.
Explicación de esta notación:
Si 0 ≤ b < 1
, entonces .a↑↑b = ab
Si b ≥ 1
, entonces .a↑↑b = aa↑↑(b-1)
Si b < 0
, entonces .a↑↑b = loga(a↑↑(b+1))
12e10
(12 * 10 ^ 10) como12*10^10
?500b
, ¿es esto inválido? Es decir, ¿podemos ignorar todas las cosas no numéricas que imprime un programa? Y si es así, ¿algo como50r7
contar como507
?Respuestas:
GolfScript; puntuar al menos f ε_0 + ω + 1 (17) / 1000
Siguiendo la sugerencia de res de usar la respuesta Lifetime of a worm para esta pregunta, presento dos programas que mejoran enormemente su derivación de la solución de Howard.
Comparten un prefijo común, módulo el nombre de la función:
calcula
g(g(1)) = g(5)
dóndeg(x) = worm_lifetime(x, [x])
crece más o menos como f ε 0 (lo que señala es "la función en la jerarquía de rápido crecimiento que crece aproximadamente a la misma velocidad que la función de Goodstein").El un poco más fácil (!) Para analizar es
.{foo}*
mapasx
afoo^x x
.así da
g^(g(5)) ( g(5) )
; Los otros 8 niveles de iteración son similares al encadenamiento de flechas. Para expresar en términos simples: sih_0 = g
yh_{i+1} (x) = h_i^x (x)
luego calculamosh_10 (g(5))
.Creo que este segundo programa casi seguramente tiene mejores resultados. Esta vez, la etiqueta asignada a la función
g
es una nueva línea (sic).Esta vez aprovecho mejor
^
como una función diferente.toma
x
la pila y salex
seguido de una cadena que contienex
copias de.{
seguido deg
seguido dex
copias de}*
; luego evalúa la cadena. Como tenía un lugar mejor para quemar caracteres sobrantes, comenzamos conj_0 = g
; sij_{i+1} (x) = j_i^x (x)
entonces la primera evaluación de las^
computadorasj_{g(5)} (g(5))
(que estoy bastante seguro ya supera el programa anterior). Luego ejecuto^
16 veces más; entonces sik_0 = g(5)
yk_{i+1} = j_{k_i} (k_i)
luego se calculak_17
. Estoy agradecido (nuevamente) a res por estimar quek_i
>> f ε_0 + ω + 1 (i).fuente
.{foo}*
mapasx
afoo^x (x)
. Si tomamosh_0 (x) = g^4 (x)
yh_{i+1} (x) = h_i^x (x)
luego el valor calculado esh_9 (g(3))
. Suf(x) = g^(4x) (x) = h_0^x (x) = h_1 (x)
.*
funciona. Es seguro decir que h_0 (x) = g ^ 4 (x) >> f_eps_0 (x); en consecuencia, la relación h_ {i + 1} (x) = h_i ^ x (x) define efectivamente una jerarquía de crecimiento rápido "acelerado" tal que h_i (x) >> f_ (eps_0 + i) (x). Es decir, el número calculado h_9 (g (3)) es ciertamente mucho mayor que f_ (eps_0 + 9) (g (3)). En cuanto a g (3), creo que puedo demostrar que es mayor que g_4, el cuarto número en la secuencia de g_i utilizado para definir el número de Graham (que es g_64).j_i ~ f_{eps_0 + i}
; hace esok_i ~ f_{eps_0 + i omega + i^2}
?k_i ~ f_{ε_0 + ω}^i (k_0)
. Aquí está el razonamiento: k_ {i + 1} = j_ {k_i} (k_i) = j_ω (k_i) ~ f_ {ε_0 + ω} (k_i) ~ f_ {ε_0 + ω} ^ 2 (k_ {i-1}) ... ~ f_ {ε_0 + ω} ^ {i + 1} (k_0), entonces k_i ~ f_ {ε_0 + ω} ^ i (k_0). Entonces es un límite inferior muy conservador en k_i, enteramente en términos de la jerarquía de rápido crecimientok_i >> f_{ε_0 + ω}^i (i) = f_{ε_0 + ω + 1} (i)
.Windows 2000 - Windows 8 (3907172 / 23³ = 321)
NOTA: ¡NO CORRE ESTO!
Guarde lo siguiente en un archivo por lotes y ejecútelo como Administrador.
Salida cuando se ejecuta en una unidad de 4 TB con el primer número impreso en negrita.
fuente
Your printed number will be divided for the number of bytes you used for your solution^3.
GolfScript, puntuación: forma demasiado
OK, ¿qué número podemos imprimir en algunos caracteres de GolfScript?
Comencemos con el siguiente código (¡ gracias, Ben! ), Que imprime
126
:Luego, repitámoslo 126 veces, dándonos un número igual a aproximadamente 1.26126 × 10 377 :
(Eso es repetición de cuerda, no multiplicación, por lo que debería estar bien según las reglas).
Ahora, repitamos ese número de 378 dígitos un poco más de 10 377 veces:
En realidad, nunca verás terminar este programa, ya que trata de calcular un número con aproximadamente 10 380 ≈ 2 1140 dígitos. Ninguna computadora jamás construida podría almacenar un número tan grande, ni una computadora así podría construirse utilizando física conocida; el número de átomos en el universo observable se estima en alrededor de 10 80 , por lo que incluso si de alguna manera podría utilizar toda la materia en el universo para almacenar este número enorme, que había todavía de alguna manera tienen que meter unos 10 380 /10 80 = ¡10 300 dígitos en cada átomo!
Pero supongamos que tenemos el propio intérprete de GolfScript de Dios, capaz de ejecutar dicho cálculo, y que todavía no estamos satisfechos. OK, ¡ hagámoslo de nuevo!
La salida de este programa, si pudiera completarse, tendría aproximadamente 10 10 383 dígitos, por lo que sería aproximadamente 10 10 10 383 .
¡Pero espera! Ese programa se está volviendo repetitivo ... ¿por qué no lo convertimos en un bucle?
Aquí, el cuerpo del bucle se ejecuta aproximadamente 10 377 veces, lo que nos da una salida teórica que consta de aproximadamente 10 10⋰ 10 377 dígitos más o menos, donde la torre de potencias iteradas de 10 tiene aproximadamente 10 377 pasos de largo. (En realidad, eso es una gran subestimación, ya que estoy descuidando el hecho de que el número que se repite también se alarga cada vez, pero en términos relativos es un problema menor).
Pero aún no hemos terminado. ¡Agreguemos otro bucle!
Incluso escribir correctamente una aproximación de tales números requiere notación matemática esotérica. Por ejemplo, en la notación de flecha hacia arriba de Knuth , el número (teóricamente) generado por el programa anterior debe ser de aproximadamente 10 ↑ 3 10 377 , dar o tomar algunas (o 10 377 ) potencias de diez, suponiendo que hice los cálculos matemáticos correctamente.
Números como este van mucho más allá de lo "increíblemente enorme" y llegan al reino de lo "inconcebible". Como en, no solo es imposible contar o escribir tales números (ya hemos cruzado más allá de ese punto en el tercer ejemplo anterior), sino que literalmente no tienen un uso concebible o existencia fuera de las matemáticas abstractas. Podemos probar, a partir de los axiomas de las matemáticas , que tales números existen, al igual que podemos probar a partir de la especificación GolfScript que el programa anterior los calcularía, si los límites de la realidad y el espacio de almacenamiento disponible no intervinieran), pero literalmente no hay nada en el universo físico que podríamos usar para contar o medir en cualquier sentido.
Aún así, los matemáticos a veces hacen uso de números aún mayores . (Teóricamente) calcular números tan grandes requiere un poco más de trabajo: en lugar de anidar más bucles uno por uno, necesitamos usar la recursividad para telescopiar la profundidad de los bucles anidados. Aún así, en principio, debería ser posible escribir un programa corto de GolfScript (bastante menos de 100 bytes, esperaría) para calcular (en teoría) cualquier número expresable en, por ejemplo, notación de flecha encadenada de Conway ; Los detalles se dejan como ejercicio. ;-)
fuente
"...No computer ever built could store a number that big...
Corrígeme si me equivoco, pero no creo que eso se aplique aquí. ¿No se trata simplemente de "almacenar" e imprimir 3 dígitos a la vez (?) Para que no sea necesario almacenar el resultado final.JavaScript 44 caracteres
Esto puede parecer un poco engañoso:
alert((Math.PI+''+Math.E).replace(/\./g,""))
Puntuación = 31415926535897932718281828459045/44 ^ 3 ≈ 3.688007904758867e + 26 ≈ 10 ↑↑ 2.1536134004
fuente
"."
para reemplazar en lugar de/\./g
m=Math,p=m.PI,e=m.E,s="",alert((p*p*p+s+e*e*e).replace(/\./g,s))
cambio, puede hacerlo , su puntaje es 3100627668029981620085536923187664/63 ^ 3 = 1.240017943838551e + 28C, puntaje = 10 10 97.61735 / 98 3 ≈ 10 ↑↑ 2.29874984
Agradezco la ayuda en la puntuación. Cualquier apreciación o corrección es apreciada. Aquí está mi método:
n = la concatenación de cada número de 1 a 2 64 -1, repetido (2 64 -1) 4 veces . Primero, así es como estoy estimando (bajo) el número acumulado de dígitos de 1 a 2 64 -1 (la "subsecuencia"): El número final en la secuencia de subsecuencia es 2 64 -1 =
18446744073709551615
con 20 dígitos. Por lo tanto, más del 90% de los números en la subsecuencia (aquellos que comienzan con1
...9
) tienen 19 dígitos. Supongamos que el 10% restante promedio de 10 dígitos. Será mucho más que eso, pero esta es una estimación baja para matemáticas fáciles y sin trampas. Esa subsecuencia se repite (2 64 -1) 4 veces, por lo que la longitudde n será al menos (0.9 × (2 64 -1) × 19 + 0.1 × (2 64 -1) × 10) × (2 64 -1) 4 = 3.86613 × 10 97 dígitos. En los comentarios a continuación, @primo confirma que la longitud de n es 4.1433x10 97 . Entonces n en sí será 10 a esa potencia, o 10 10 97.61735 .l = 98 caracteres de código
puntaje = n / l 3 = 10 10 97.61735 / 98 3
Requisito: debe ejecutarse en una computadora de 64 bits donde
sizeof(long) == 8
. Mac y Linux lo harán.fuente
'z'
es el valor constante122
. ¿Derecho?printf("%d",n)
hará que el número sea mucho mayor. Además, el ordenador de 64 bits no significa largos de 64 bits, por ejemplo, Windows utiliza el modelo LLP64 tanto tiempo sigue siendo de 32 bits0..2^64-1
es exactamente 357823770363079921190 dígitos de largo. Los(2^64-1)^4
tiempos repetidos son 4.1433x10 ^ 97. Lleva 10 a ese poder es10^10^97.61735
≈ 10 ↑↑ 3.29875. Creo que estás reclamando un poder de diez que no tienes (nota dónde se3.866×10^97
convirtió3.866^10^97
.2.0
lugar de97
.10^10^10^2.00
=10^10^97.6
. Lo reflejaré en mi puntaje ahora.Python 3 - 99 caracteres - (muy probablemente) significativamente más grande que el número de Graham
Se me ocurrió una función cada vez más rápida basada en una extensión de la función Ackermann.
http://fora.xkcd.com/viewtopic.php?f=17&t=31598 me inspiró, pero no necesita mirar allí para comprender mi número.
Aquí está la versión modificada de la función ackermann que usaré en mi análisis:
Mi función
A
en el código anterior técnicamente no es la misma, pero en realidad es más fuerte, con la siguiente instrucción para reemplazar la tercera línea de la definición anterior:(a tiene que ser al menos 1, por lo que tiene que ser más fuerte)
Pero para mis propósitos, supondré que es lo mismo que el más simple, porque el análisis ya está parcialmente realizado para la función de Ackermann y, por lo tanto, para esta función cuando tiene dos argumentos.
Se garantiza que mi función eventualmente dejará de recurrir porque siempre: elimina un argumento, disminuye el primer argumento o mantiene el mismo primer argumento y disminuye el segundo argumento.
Análisis de talla
El número de Graham, AFAIK, se puede representar
G(64)
usando:Donde a
↑^(n)
b es la notación de flecha hacia arriba de knuth.También:
El número expresado en el programa anterior es
A(0,1,2,3,4,...,123,124,125)
.Dado que
g^64(4)
es el número de Graham, y suponiendo que mis cálculos sean correctos, entonces es menor queA(1,64,100)
, mi número es significativamente mayor que el número de Graham.Señale cualquier error en mis matemáticas, aunque si no hay ninguno, este debería ser el mayor número calculado hasta ahora para responder a esta pregunta.
fuente
range(ord('~'))
? ¿No podría haber hechorange(125)
por menos bytes, lo que le permitiría obtener un número mayor comorange(A(9,9,9))
?Perl - puntuación ≈ 10 ↑↑ 4.1
Una vez más, abusar del motor de expresiones regulares de Perl para procesar una cantidad inimaginable de combinaciones, esta vez utilizando un descenso recursivo.
En la parte más interna de la expresión, tenemos un desnudo
.
para evitar la recursión infinita y, por lo tanto, limitar los niveles de recursión a la longitud de la cadena.Lo que terminaremos es esto:
... repetido 671088640 veces, para un total de 12750684161 anidamientos, lo que pone en evidencia mi intento anterior de 23 anidamientos. Sorprendentemente, Perl ni siquiera se ahoga con esto (una vez más, el uso de la memoria se mantiene estable en aproximadamente 1.3 GB), aunque pasará bastante tiempo antes de que se emita la primera declaración impresa.
De mi análisis anterior a continuación, se puede concluir que el número de dígitos de salida será del orden de (! 12750684161) 671088640 , donde ! K es el Factorial Izquierdo de k (ver A003422 ). ¡Podemos aproximar esto como (k-1)! , que es estrictamente más pequeño, pero del mismo orden de magnitud.
Y si le preguntamos a wolframalpha :
... que apenas cambia mi puntaje en absoluto. Pensé con seguridad que sería al menos 10 ↑↑ 5 . Supongo que la diferencia entre 10 ↑↑ 4 y 10 ↑↑ 4.1 es mucho más grande de lo que piensas.
Perl - puntuación ≈ 10 ↑↑ 4
Abusar del motor perl regex para hacer algunos combinatorios por nosotros. El bloque de código incrustado
(??{print})
insertará su resultado directamente en la expresión regular. Como$_
está compuesto completamente por2
s (y el resultadoprint
es siempre1
), esto nunca puede coincidir y envía a Perl girando a través de todas las combinaciones posibles, de las cuales hay bastantes.Constantes utilizadas
$^F
- el identificador de archivo de sistema máximo, normalmente2
.$]
- el número de versión perl, similar a5.016002
.$_
es entonces una cadena que contiene el dígito2
repetido 671088640 veces. El uso de la memoria es constante en aproximadamente 1.3 GB, la salida comienza de inmediato.Análisis
Definamos P k (n) como el número de veces que se ejecuta la declaración de impresión, donde k es el número de anidamientos yn es la longitud de la cadena más uno (solo porque no tengo ganas de escribir n + 1 en todos lados).
(.*.*)*
P 2 (n) = [ 2, 8, 28, 96, 328, 1120, 3824, 13056, ... ]
((.*.*)*)*
P 3 (n) = [ 3, 18, 123, 900, 6693, 49926, 372615, 2781192, ... ]
(((.*.*)*)*)*
P 4 (n) = [ 4, 56, 1044, 20272, 394940, 7696008, 149970676, 2922453344, ... ]
((((.*.*)*)*)*)*
P 5 (n) = [ 5, 250, 16695, 1126580, 76039585, 5132387790, 346417023515, 23381856413800, ... ]
(((((.*.*)*)*)*)*)*
P 6 (n) = [ 6, 1452, 445698, 137050584, 42142941390, 12958920156996, ... ]
((((((.*.*)*)*)*)*)*)*
P 7 (n) = [ 7, 10094, 17634981, 30817120348, 53852913389555, ... ]
etc. En general, la fórmula se puede generalizar de la siguiente manera:
dónde
Es decir, el factorial izquierdo de k , es decir, la suma de todos los factoriales menores que k (véase A003422 ).
No he podido determinar formas cerradas para D k y E k , pero esto no importa demasiado, si observamos que
y
Con 23 anidamientos, esto nos da una puntuación aproximada de:
Esto debería ser casi exacto, en realidad.
Pero para poner esto en una notación que es un poco más fácil de visualizar, podemos aproximar la base del exponente interno:
y luego el exponente mismo:
y luego pregunta a wolframalpha :
que también puedes llamar al 10 ↑↑ 4 y listo.
fuente
Javascript, 10 ↑↑↑↑ 210
100 caracteres:
Basado en la observación de que iterar al máximo
f
es la forma óptima de hacerlo, reemplacé las 13 llamadasf
con 3 niveles de llamadas de bucles anidadosf
,z
veces cada una (mientrasf
sigue aumentandoz
).Calculé el puntaje analíticamente en una hoja de papel: lo escribiré si alguien está interesado en verlo.
Puntuación mejorada: 10 ↑↑ 13
Javascript, en exactamente 100 caracteres, nuevamente:
Esto mejora mi respuesta original de tres maneras:
Definir
z
el alcance global nos evita tener que escribiro.z
cada vez.Es posible definir un captador en el ámbito global (ventana) y escribir en
f
lugar deo.f
.Tener más iteraciones
f
vale más que comenzar con un número mayor, por lo que en lugar de(Math.E+'').replace('.','')
(= 2718281828459045, 27 caracteres), es mejor usar~~Math.E+''
(= 2, 11 caracteres), y usar los caracteres recuperados para llamarf
muchas veces más.Dado que, como se analiza más adelante, cada iteración produce, a partir de un número en el orden de magnitud M , un número mayor en el orden de magnitud 10 M , este código produce después de cada iteración
Puntuación: ∼10 10 10 10 10 16 ≈ 10 ↑↑ 6.080669764
Javascript, en exactamente 100 caracteres:
Cada uno
o.f
invoca el bucle while, para un total de 5 bucles. Después de solo la primera iteración, el puntaje ya está por encima de 10 42381398144233621 . En la segunda iteración, Mathematica no pudo calcular ni siquiera el número de dígitos en el resultado.Aquí hay un tutorial del código:
En eso
Comience con 2718281828459045 eliminando el punto decimal de
Math.E
.Iteración 1
Concatenar la secuencia decreciente de números,
para formar un nuevo número (gigantesco),
¿Cuántos dígitos hay en este número? Bueno, es la concatenación de
En Mathematica
En otras palabras, es 2.72⋅10 42381398144233625 .
Haciendo mi puntaje, después de solo la primera iteración, 2.72⋅10 42381398144233619 .
Iteración 2
Pero eso es solo el comienzo. ¡Ahora, repita los pasos, comenzando con el número gigantesco ! Es decir, concatenar la secuencia decreciente de números,
Entonces, ¿cuál es mi nuevo puntaje, Mathematica?
Iteración 3
Repetir.
Iteración 4
Repetir.
Iteración 5
Repetir.
Puntuación analítica
En la primera iteración, calculamos el número de dígitos en la concatenación de la secuencia decreciente a partir de 2718281828459045, contando el número de dígitos en
Esta suma puede ser representada por la fórmula,
donde Z denota el número inicial ( por ejemplo, 2718281828459045) y O Z denota su orden de magnitud ( por ejemplo , 15, ya que Z since 10 15 ). Usando equivalencias para sumas finitas , lo anterior se puede expresar explícitamente como
que, si tomamos 9 ≈ 10, se reduce aún más a
y, finalmente, expandiendo los términos y ordenándolos disminuyendo el orden de magnitud, obtenemos
Ahora, dado que solo estamos interesados en el orden de magnitud del resultado, sustituyamos Z con "un número en el orden de magnitud de O Z ", es decir, 10 O Z -
Finalmente, los términos segundo y tercero se cancelan, y los dos últimos términos se pueden descartar (su tamaño es trivial), dejándonos con
del cual gana el primer término.
Reexpresado,
f
toma un número en el orden de magnitud de M y produce un número aproximadamente en el orden de magnitud de M (10 M ).La primera iteración se puede verificar fácilmente a mano. 2718281828459045 es un número del orden de magnitud de 15, por
f
lo tanto, debe producir un número del orden de magnitud de 15 (10 15 ) ∼ 10 16 . De hecho, el número producido es, desde antes, 2.72⋅10 42381398144233625 , es decir, 10 42381398144233625 ∼ 10 10 16 .Al observar que M no es un factor significativo en M (10 M ), el orden de magnitud del resultado de cada iteración, entonces, sigue un patrón simple de tetración:
Fuentes LaTeX
fuente
f
hace algo como llevar el númeroz
a su propio poder. Entonces eso es algo así↑↑↑
. Por supuesto que el puntaje no es2↑↑↑2
, lo siento ... más bien,2↑↑↑5+1
parece. ¿Estaría de acuerdo, debería poner eso en la tabla de clasificación?i=o.z;while(i--)...
usted no está ejecutando loso.z
tiempos de ciclo , porque un ciclo se basa en una variable entera yo.z
contiene una cadena más grande que el entero representable más grande, dependiendo del tamaño de palabra de su intérprete. Suponiendo, para su beneficio, que su intérprete no vomitará al convertir una cadena de este tipo en int,i
comenzará cada vez con su valor entero representable más grande, digamos 2 ^ 63, y no con el valor actual deo.z
.APL, 10 ↑↑ 3.4
Aquí está mi intento revisado:
Programa de 100 caracteres / byte *, que se ejecuta en el hardware actual (utiliza una cantidad insignificante de memoria y variables int de 32 bits normales), aunque tardará mucho tiempo en completarse.
En realidad, puede ejecutarlo en un intérprete APL y comenzará a imprimir dígitos. Si se le permite completar, habrá impreso un número con 10 × 123456789 44 dígitos.
Por tanto, la puntuación es de 10 10 × 123 456 789 44 /100 3 ≈ 10 10 353 ≈ 10 ↑↑ 3.406161
Explicación
⎕D
es una cadena constante predefinida igual a'0123456789'
n←⍎⎕D
define n como el número representado por esa cadena: 123456789 (que es <2 31 y, por lo tanto, puede usarse como una variable de control de bucle){⍞←⎕D}
imprimirá los 10 dígitos a la salida estándar, sin una nueva línea{⍞←⎕D}⍣n
lo hará n veces (⍣
es el "operador de energía": no es ni *, / ni ^, porque no es una operación matemática, es una especie de bucle){⍞←n}⍣n⍣n
repetirá la operación anterior n veces, por lo tanto imprimirá los 10 dígitos n 2 veces{⍞←n}⍣n⍣n⍣n
lo haré n 3 veces⍣n
allí, por lo que imprime n 44 veces la cadena'0123456789'
.⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ *: APL puede escribirse en su propio juego de
caracteres de un solo byte (heredado) que asigna símbolos APL a los valores superiores de 128 bytes. Por lo tanto, para fines de puntuación, un programa de N caracteres que solo usa caracteres ASCII y símbolos APL puede considerarse que tiene una longitud de N bytes.
fuente
100 cubed
(100 ^ 3).{⍞←⎕D}
a⍞←
lo que le ahorra tres bytes que se pueden utilizar para agregar una más⍣n
y hacer⊢n←⍎⎕D
en⌽⍕n←⍎⎕D
un aumento de 80 veces. Si permite ejecutar con⎕PP←17
, use en×⍨
lugar de lo⌽⍕
cual casi duplica la cantidad de dígitos impresos.Haskell, puntaje: (2 2 2 65536-3 ) / 1000000 ≈ 2 ↑↑ 7 ≈ 10 ↑↑ 4.6329710779
Este programa tiene exactamente 100 bytes de código puro de Haskell. Imprimirá el cuarto número de Ackermann, y eventualmente consumirá toda la energía, materia y tiempo disponibles del Universo y más allá en el proceso ( superando así ligeramente el límite suave de 5 segundos).
fuente
o=length[]
te da un extra!q
al final y te ahorra un byte además de eso.Python, 2 ↑↑ 11/830584 ≈ 10 ↑↑ 8.632971 (notación de flecha hacia arriba de Knuth)
Probablemente ninguna computadora tenga suficiente memoria para ejecutar esto con éxito, pero eso no es realmente culpa del programa. Con los requisitos mínimos del sistema satisfechos, funciona.
Sí, esto está cambiando un poco los valores booleanos.
True
se ve obligado1
en este contexto. Python tiene enteros de longitud arbitraria.fuente
print True<<(True<<(True<<(True<<True<<True)))
hace, y eso genera una cadena de 19k.t=True
y luego usandot
after?$python -c 'print True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<True<<True)))))))))' Traceback (most recent call last): File "<string>", line 1, in <module> OverflowError: long int too large to convert to int
GolfScript 3.673e + 374
Creo que
*
está permitido ya que indica la repetición de la cuerda, no la multiplicación.Explicación:
'~'(
dejará 126 (el valor ASCII de "~") en la pila. Luego copie el número, conviértalo en una cadena y repita la cadena 126 veces. Esto da126126126126...
cuál es aproximadamente1.26 e+377
. La solución es de 7 caracteres, así que divídalos entre7^3
, para obtener una puntuación de aproximadamente3.673e+374
fuente
Rubí, probabilísticamente infinito, 54 caracteres.
x se inicializa a 97. Luego iteramos el siguiente procedimiento: Genere x números aleatorios entre 0 y 1. Si son todos iguales, luego termine e imprima x. De lo contrario, doble x y repita. Dado que los números aleatorios de Ruby tienen 17 dígitos de precisión, las probabilidades de terminar en cualquier paso son 1 en (10e17) ^ x. La probabilidad de terminar dentro de n pasos es, por lo tanto, la suma de x = 1 a n de (1 / 10e17) ^ (2 ^ n), que converge a 1 / 10e34. Esto significa que para cualquier número, no importa cuán grande sea, es abrumadoramente improbable que este programa genere un número menor.
Ahora, por supuesto, la pregunta filosófica es si se puede decir que un programa que tiene menos de 1 en 10 ^ 34 de terminar en el paso n para cualquier n puede terminar alguna vez. Si suponemos no solo tiempo y potencia infinitos, sino que el programa tiene la capacidad de correr a una velocidad creciente a una velocidad que excede la velocidad a la que disminuye la probabilidad de finalización, podemos, creo, de hecho hacer la probabilidad de terminando por tiempo t arbitrariamente cerca de 1.
fuente
GolfScript, ≈ f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (126)))))))))
Esto está descaradamente adaptado de otra respuesta de @Howard e incorpora sugerencias de @Peter Taylor.
Mi comprensión de GolfScript es limitada, pero creo que los operadores
*
y^
anteriores no son los operadores aritméticos prohibidos por el OP.(Estaré encantado de eliminar esto si @Howard quiere enviar su propia versión, que sin duda sería superior a esta de todos modos).
Este programa calcula un número que es aproximadamente f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (126)))))) ))) - una iteración nueve veces mayor de f ε 0 - donde f ε 0 es la función en la jerarquía de rápido crecimiento que crece aproximadamente a la misma velocidad que la función de Goodstein. (f ε 0crece tan rápido que las tasas de crecimiento de la función n (k) de Friedman y de las flechas encadenadas de Conway de k-pliegues son prácticamente insignificantes incluso en comparación con un solo f ε 0 no iterado) .
fuente
'',:o;'oo',:t;
simplemente asigna los valores0
ao
y2
parat
; si eso es solo para evitar la falta de dígitos, entonces se puede abreviar en gran medida,:o)):t;
, excepto que no hay razón para eliminart
en primer lugar porque puede escribirexpr:t;{...}:f;[[[t]f]f]f
como[[[expr:t]{...}:f~]f]f
guardar otros 3 caracteres.o
: estoy bastante seguro de que[0 126]f
será uno más grande,[126]f
por lo que guarda un carácter y aumenta la salida. Aunque está dejando una cadena vacía allí, lo que probablemente rompe las cosas: podría ser mejor comenzar[[,:o'~'=]
[
son innecesarios ya que no tienes nada más en la pila.dc, 100 caracteres
Dado suficiente tiempo y memoria, esto calculará un número alrededor de 15 ↑ ¹⁶⁶⁶⁶⁶⁵ 15. Originalmente había implementado la función de hiperoperación , pero requería demasiados caracteres para este desafío, por lo que eliminé las condiciones
n = 2, b = 0
yn >= 3, b = 0
, convirtiendo lan = 1, b = 0
condición enn >= 1, b = 0
.Los únicos operadores aritméticos utilizados aquí son la suma y la resta.
EDITAR: como se prometió en los comentarios, aquí hay un desglose de lo que hace este código:
Como se señaló, esto se desvía de la función de hiperoperación en que los casos base para la multiplicación y superiores se reemplazan con el caso base para la suma. Este código se comporta como si
a*0 = a^0 = a↑0 = a↑↑0 ... = a
, en lugar de matemáticamente correctoa*0 = 0
ya^0 = a↑0 = a↑↑0 ... = 1
. Como resultado, calcula valores que son un poco más altos de lo que deberían ser, pero eso no es gran cosa ya que apuntamos a números más grandes. :)EDITAR: Acabo de notar que un dígito se deslizó en el código por accidente, en la macro que realiza incrementos para
n=0
. Lo eliminé reemplazándolo con 'F' (15), que tiene el efecto secundario de escalar cada operación de incremento en 15. No estoy seguro de cuánto afecta esto al resultado final, pero probablemente ahora sea mucho más grande.fuente
¿No hay más límite en tiempo de ejecución? OK entonces.
¿El programa necesita ser ejecutable en computadoras modernas?
Ambas soluciones utilizan una compilación de 64 bits, por lo que
long
es un número entero de 64 bits.C: mayor que 10 (2 64 -1) 2 64 , que en sí es mayor que 10 10 355393490465494856447 ≈ 10 ↑↑ 4.11820744
88 caracteres.
Para facilitar estas fórmulas, las usaré
t = 2^64-1 = 18446744073709551615
.main
llamaráf
con un parámetro det
, que recorrerá lost
tiempos, cada vez que imprima el valort
y llamef
con un parámetro det-1
.Cifras totales impresas
20 * t
.Cada una de esas llamadas a
f
con un parámetro det-1
iterarát
veces, imprimirá el valort
y llamará a f con un parámetro det-2
.Total de dígitos impresos:
20 * (t + t*t)
Probé este programa usando el equivalente de enteros de 3 bits (configuré
i = 8
y tuve una llamada principalf(7)
). Llegó a la declaración de impresión 6725600 veces. Eso funciona.7^8 + 7^7 + 7^6 + 7^5 + 7^4 + 7^3 + 7^2 + 7
Por lo tanto, creo que este es el conteo final para el programa completo:Total de dígitos impresos:
20 * (t + t*t + t^3 + ... + t^(t-1) + t^t + t^(2^64))
No estoy seguro de cómo calcular (2 64 -1) 2 64 . Esa suma es menor que (2 64 ) 2 64 , y necesito una potencia de dos para hacer este cálculo. Por lo tanto, calcularé (2 64 ) 2 64 -1 . Es más pequeño que el resultado real, pero como es una potencia de dos, puedo convertirlo a una potencia de 10 para compararlo con otros resultados.
¿Alguien sabe cómo realizar esa suma o cómo convertir (2 64 -1) 2 64 a 10 n ?
Pero recuerde, esa es la cantidad de dígitos impresos. El valor del entero es 10 elevado a esa potencia, entonces 10 ^ 10 ^ 355393490465494856447
Este programa tendrá una profundidad de pila de 2 ^ 64. Eso es 2 ^ 72 bytes de memoria solo para almacenar los contadores de bucle. Son 4 mil millones de terabytes de contadores de bucles. Sin mencionar las otras cosas que irían a la pila por 2 ^ 64 niveles de recursión.
Editar: corrigió un par de errores tipográficos y usó un valor más preciso para log2 (10).
Edición 2: Espera un segundo, tengo un bucle del que el printf está fuera. Vamos a arreglar eso. Se agregó inicialización
i
.Edición 3: Maldita sea, arruiné las matemáticas en la edición anterior. Fijo.
Este se ejecutará en computadoras modernas, aunque no terminará pronto.
C: 10 ^ 10 ^ 136 ≈ 10 ↑↑ 3.329100567
98 personajes.
Esto imprimirá el inverso bit a bit de cero, 2 ^ 64-1, una vez para cada iteración. 2 ^ 64-1 es un número de 20 dígitos.
Número de dígitos =
20 * (2^64-1)^7
= 14536774485912137805470195290264863598250876154813037507443495139872713780096227571027903270680672445638775618778303705182042800542187500Redondeando la longitud del programa a 100 caracteres, Puntuación = número impreso / 1,000,000
Puntuación = 10 ^ 14536774485912137805470195290264863598250876154813037507443495139872713780096227571027903270680672445638775618778303705182042800542187494
fuente
%u
estaba imprimiendo números de 32 bits incluso con una compilación de 64 bits, así que simplemente hice lall
costumbre de escribir en un compilador de 32 bits.%llu
sería paralong long
, y%lu
sería correcto paralong
.%u
siempre es de 32 bits,%llu
siempre es de 64 bits, ya sea compilando como 32 o 64 bits. Sin embargo, la solución aquí requiere quelong
sea de 64 bits, por lo que tiene razón,%lu
es suficiente.i
.R -
4941 caracteres de código, 4.03624169270483442 * 10 ^ 5928 ≈ 10 ↑↑ 2.576681348imprimirá [reproduciendo aquí solo el comienzo]:
fuente
cat
Es una función extraña en que el primer argumento es...
. Entonces, todo antes del primer argumento nombrado va a...
(y serácat
'editado), por lo quesep
debe nombrarse, de lo contrario, podría acortarse comocat(abs(.Random.seed),,"")
ECMAScript 6 - 10 ^ 3 ↑↑↑↑ 3/884736
(3 ↑↑↑↑ 3 es G (1) donde G (64) es el número de Graham)
Salida: 10 ^ 3 ↑↑↑↑ 3
Consejos:
Eliminada por brevedad.G
es la función donde G (64) es el número de Graham. La entrada es un entero. La salida es una cadena unaria escrita con 0.K
es la función de flecha hacia arriba de Knuth a ↑ n b donde a es implícitamente 3. La entrada es n, una cadena unaria yb, una cadena unaria. La salida es una cadena unaria.u
es "1".v
es "0000" o G (0)e
es "000".fuente
Maximum code length is 100 bytes;
De lo contrario, esto es, cerca de inmejorableC
(Con disculpas a Darren Stone)
n = 2 ^ número de 64 dígitos (9 ...)
l = 100 caracteres de código
puntaje ≈ 1e + 2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936570 ≈ 10 ↑↑ 3.2974890744
[Puntuación = n ^ 5 / l ^ 3 = (10 ^ (2 ^ 320) -1) / (100 ^ 3) = (10 ^ 2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936576-1) / (10 ^ 6]
Tenga en cuenta que merezco ser azotado sin piedad por esta respuesta, pero no pude resistirme. No recomiendo actuar como yo en stackexchange, por razones obvias. :-PAGS
EDITAR: Sería aún más difícil resistir la tentación de ir con algo como
... pero supongo que una regla intencionada pero no especificada era que se debe imprimir toda la serie de dígitos que componen el número.
fuente
)
, pero está bien, porque ahora solo tienes 96 caracteres.Nuevo Ruby: puntaje ~ f ω ω2 +1 (126 2 2 126 )
donde f α (n) es la jerarquía de rápido crecimiento.
Pruébalo en línea!
El
*n
son sólo cuerdas y la matriz de multiplicación, por lo que debe estar bien.Código sin golf:
donde
b.-b<=>0
devuelve un entero1
más cercano a0
queb
.Explicación:
Se imprime
n
al comienzo de cada llamada deH
.H[[]]
doblesn
(n
veces), es decirn = n<<n
.H[[0,a,b,c,...,z]]
llamadasH[[a,b,c,...,z]]
(n
veces).H[[k+1,a,b,c,...,z]]
llamadasH[[k]*n+[a,b,c,...,z]]
(n
veces), donde[k]*n = [k,k,...,k]
.H[[-1,a,b,c,...,z]]
llamadasH[[n]*n+[a,b,c,...,z]]
(n
veces).H[[-(k+1),a,b,c,...,z]]
llamadasH[[-k]*n+[a,b,c,...,z]]
(n
veces).H[k] = H[[k]]
.Mi programa se inicializa
n = 126
, luego llamaH[-n-1]
126 2 2 126 veces.Ejemplos:
H[[0]]
llamará loH[[]]
que correspondan = n<<n
(n
veces).H[[0,0]]
llamaráH[[0]]
(n
veces).H[[1]]
llamaráH[[0]*n]
(n
veces).H[[-1]]
llamaráH[[n]*n]
(n
veces).H[[-1,-1]]
llamaráH[[n]*n+[-1]]
(n
veces).H[[-3]]
llamaráH[[-2]*n]
(n
veces).Pruébalo en línea!
Ver revisiones para otras cosas interesantes.
fuente
Haskell - Función de Ackermann aplicada a su resultado 20 veces - 99 caracteres
Esta es la mejor solución de Haskell que se me ocurre basada en la función de Ackermann: puede observar algunas similitudes con la solución de nm, el i = round $ log pi se inspiró a partir de ahí y el resto es una coincidencia: D
Ejecuta la función ackermann sobre sí misma 20 veces, comenzando en una, la secuencia es
En cuanto a la estimación, wikipedia dice:
a (m, n) = 2 ↑ m-2 (n + 3) - 3
De esto podemos ver a3 (1) = a (61,61) = 2 ↑ 59 64 + 3, que es claramente mayor que g1 = 3 ↑ 4 3, a menos que el 3 al inicio sea mucho más importante de lo que creo. Después de eso, cada nivel hace lo siguiente (descartando las constantes insignificantes en un n ):
Si estos son aproximadamente equivalentes, entonces un 20 (1) ~ = g 18 . El término final en a n , (a n-1 ) es mucho mayor que 3, por lo que es potencialmente mayor que g 18 . Veré si puedo averiguar si eso lo impulsaría incluso una sola iteración e informaré.
fuente
length"a"
ahorra un par de bytes y le permite otro.a
Código de máquina x86: 100 bytes (ensamblado como archivo MSDOS .com)
Nota: puede doblar un poco las reglas
Este programa generará 2 (65536 * 8 + 32) nueves que pondrían el puntaje en (10 2 524320 -1) / 1000000
Como contador, este programa usa la pila completa (64 KB) más dos registros de 16 bits
Código ensamblado:
Montaje:
fuente
C
El tamaño del archivo es de 45 bytes.
El programa es:
Y el número producido es mayor que 10 ^ (10 ^ (10 ^ 1.305451600608433)).
El archivo al que redireccioné std actualmente tiene más de 16 Gb y sigue creciendo.
El programa finalizaría en un período de tiempo razonable si tuviera una computadora mejor.
Mi puntaje es indiscutible con doble punto flotante de precisión.
fuente
GNU Bash, 10 ^ 40964096² /
80 ^ 3 ≈ 10 ↑↑ 2.072820169C = 4096 en cualquier sistema razonable. SHLVL es un número entero positivo pequeño (generalmente 1 o 2 dependiendo de si / bin / sh es bash o no).
Solo UNIX de 64 bits:
Puntuación: ~ 10 ^ (40964096409640964096 * 40964096409640964096) / 88 ^ 3
fuente
bash -c 'bash -c "echo \$SHLVL"'
stat --printf
no trabajes Pruebastat -c %s
C, 10 ^ 10 ^ 2485766 ≈ 10 ↑↑ 3.805871804
Creamos una matriz de 258048 enteros sin signo. No podría ser largos sin firmar porque eso hizo que el programa fuera demasiado largo. No están firmados porque no quiero usar un comportamiento indefinido, este código es C adecuado (aparte de la falta de retorno de main ()) y se compilará y ejecutará en cualquier máquina normal, aunque seguirá funcionando durante mucho tiempo . Este tamaño es el más grande que podemos expresar legalmente sin usar caracteres que no sean ascii.
Recorremos la matriz a partir del último elemento. Imprimimos los dígitos de
2^32-1
, incrementamos el elemento y soltamos el ciclo si el elemento no se ha ajustado a 0. De esta manera, recorreremos los(2^32 - 1)^254048 = 2^8257536
tiempos, imprimiendo 10 dígitos cada vez.Aquí hay un código de ejemplo que muestra el principio en un rango de datos más limitado:
El resultado es aproximadamente 10 ^ 10 ^ 2485766 dividido por un millón, que sigue siendo aproximadamente 10 ^ 10 ^ 2485766.
fuente
Powershell (2.53e107976 / 72³ = 6.78e107970 ≈ 10 ↑↑ 1.701853371)
Esto tarda mucho más de 5 segundos en ejecutarse.
Recupera y concatena la longitud de bytes de cada archivo en su unidad actual. Regex elimina todos los caracteres que no sean dígitos.
fuente
0
allí.-ea(+'')
para reducir el tamaño (''
convertido a un número0
, cuyo valor de enumeración esSilentlyContinue
). Puede usar\D
para la expresión regular de reemplazo que es lo mismo que[^\d]
. Y solo puede usar en%{$_.Length}
lugar de loselect Length
que elimina los encabezados de columna. Y luego puedes deshacerte del-split
y-replace
también, dejándote con-join(gci \ -ea(+'')-r|%{$_.Length})
37 caracteres más cortos (también reordené los parámetros porque los paréntesis son necesarios de todos modos debido a+''
).Python 3, puntaje = ack (126,126) / 100 ^ 3
La función f es la función ackermann, que tengo suficiente espacio para invocar.
Editar: anteriormente "else n + 1", que violaba las reglas de desafío: felicitaciones a Simply Beautiful Art.
fuente
f(m-g,g)
af(m-g,m)
.f(m-g,i)
. Además, al final de la primera línea, usa un número. Creo que querías usarn+g
, con lo que señalaré que serán+n
más grande.JavaScript 98 caracteres
genera 2.718e + 239622337 ≈ 10 ↑↑ 2.9232195202
Para puntajes de poco más de 2.718e + 239622331 ≈ 10 ↑↑ 2.9232195197
que es lo más grande que puedo hacer sin que se caiga el navegador.
(console.log (a) le mostrará la salida completa)
No ejecutes estos:
generaría 2.718 + e121333054704 ≈ 10 ↑↑ 3.0189898069 (también conocido como 2.718 * 10 ^ (1.213 * 10 ^ 12) para comparar con la respuesta más larga:
versión más extrema, si no bloqueó su navegador: (80 caracteres)
que crearía un número aproximadamente del mismo tamaño que e * 10 ^ (10 ^ 19) ≈ 10 ↑↑ 3.106786869689
Editar: la solución original del código actualizado solo generó 2.718e + 464
fuente
Python 3: 98 caracteres, ≈ 10 ↑↑ 256
Usando una función de argumento variable:
Efectivamente, E disminuye el primer argumento mientras aumenta el resto de los argumentos, excepto que en lugar de poner -1 en los argumentos, deja caer el argumento. Como cada ciclo disminuye el primer argumento o disminuye el número de argumentos, se garantiza que terminará. La función creciente utilizada es int ("% d% d"% (k, k)), que da un resultado entre k ** 2 + 2 * k y 10 * k ** 2 + k. Mi código usa el símbolo *, pero no como multiplicación. Se utiliza para trabajar con números variables de argumentos, que creo que deberían seguir las reglas, ya que el objetivo claro de las reglas era restringir operaciones específicas, no los símbolos en sí.
Algunos ejemplos de cuán grande es E rápidamente:
Solo los dos primeros son ejecutables en mi computadora en un tiempo razonable.
Entonces, E es invocado por
E(*range(ord('~')))
- lo que significa:No estoy completamente seguro de cuán grande es (he estado tratando de aproximarlo en vano), pero es obvio que es ~ realmente ~ grande.
Como ejemplo, alrededor de doce ciclos, el resultado es: (técnicamente un poco más que)
Estimación de resultados:
Si nos aproximamos al paso creciente
lambda k: 10 * k**2
, la función se puede describir comoLo relevante que estamos haciendo aquí es construir una torre de poderes de diez, por lo que el puntaje eventual se puede aproximar a 10 ↑↑ 256.
Mejor (aunque parcial) estimación de resultados:
Esto usa lo mismo
10 * k**2
que la otra estimación.Según la estimación anterior, sería:
Que es significativamente más pequeño que el valor real ya que usa en
a**2
lugar de2**a
para el 10 y usa ena*2
lugar de2**a
para el b.fuente
C (puntaje ≈ 10 ^ 20 000 000 000 ≈ 10 ↑↑ 3.005558275)
A pesar de que
rand()
la salida es determinista porque no hay una función semilla.fuente
rand()
como condición de terminación lo hace no determinista. Además, llamarrand()
en cada iteración debería hacerlo terriblemente lento. Use algo comoLONG_MAX
definido en sulimits.h
lugar.non deterministic
, retrocedo, porque no hay semilla como la que escribiste.~' '
lugar derand()
, impreso con%u
? Dos bytes menos de origen y un valor más alto.