Su objetivo es imprimir (a la salida estándar) el mayor número posible, utilizando solo diez caracteres de código.
- Puede usar cualquier característica de su idioma, excepto las funciones de exponenciación incorporadas.
- Del mismo modo, no puede usar la notación científica para ingresar un número. (Por lo tanto, no
9e+99
.)
- Del mismo modo, no puede usar la notación científica para ingresar un número. (Por lo tanto, no
- El programa debe imprimir el número sin ninguna entrada del usuario. Del mismo modo, no se puede leer desde otros archivos, ni desde la Web, etc.
- Su programa debe calcular un solo número e imprimirlo. No puede imprimir una cadena, ni puede imprimir el mismo dígito miles de veces.
- Puede excluir del límite de 10 caracteres cualquier código necesario para imprimir cualquier cosa. Por ejemplo, en Python 2, que usa la
print x
sintaxis, puede usar hasta 16 caracteres para su programa. - El programa realmente debe tener éxito en la salida. Si tarda más de una hora en ejecutarse en la computadora más rápida del mundo, no es válido.
- La salida puede estar en cualquier formato (para que pueda imprimir
999
,5e+100
etc.) - El infinito es un concepto abstracto , no un número. Entonces no es una salida válida.
code-challenge
number
busy-beaver
Ypnypn
fuente
fuente
If it takes longer than an hour to run on any computer in the world, it's invalid.
no es objetivo. Podría (en teoría) fabricar una computadora que* 2^x
?Respuestas:
Wolfram Language
ack (9!, 9!) =
La salida está en notación de flecha.
fuente
ack(99!,9)
Es mucho, mucho más grande.Perl,> 1.96835797883262e + 18
Puede que no sea la respuesta más grande ... ¡hoy! ¡Pero espera suficientes milenios y lo será!
Editar:
Para abordar algunos de los comentarios, por "milenios suficientes", de hecho me refiero a cientos de años.
Para ser justos, si la gran muerte por congelación / calor del universo es cómo terminará el universo (se estima que ocurrirá ~ 10 100 años), el valor "final" sería ~ 10 214 , que ciertamente es mucho menor que algunos de los otras respuestas (sin embargo, "las fluctuaciones cuánticas aleatorias o la tunelización cuántica pueden producir otro Big Bang en 10 10 56 años"). Si adoptamos un enfoque más optimista (p. Ej., Un modelo cíclico o multiverso), entonces el tiempo continuará infinitamente y, por lo tanto, algún día en algún universo, en alguna arquitectura de bits altos, la respuesta excedería a algunos de los otros.
Por otro lado, como se señaló, de
time
hecho está limitado por el tamaño de entero / largo, por lo que en realidad algo así~0
siempre produciría un número mayor quetime
(es decir, el máximotime
admitido por la arquitectura).Esta no fue la respuesta más seria, ¡pero espero que la hayan disfrutado!
fuente
time
ajustará y devolverá un número pequeño en algún momento? Depende de si es perl de 32 o 64 bits, supongoWolfram ≅ 2.003529930 × 10 19728
Sí, es un idioma! Conduce el back-end del popular sitio Wolfram Alpha. Es el único idioma que encontré donde la función Ackermann está incorporada y abreviada a menos de 6 caracteres.
En ocho personajes:
O ≅ 2.003529930 × 10 19728
ack(4,3)
,ack(5,2)
etc. son mucho más grandes, pero demasiado grandes.ack(4,2)
es probablemente el mayor número de Ackermann que se puede calcular completamente en menos de una hora.Los números más grandes se representan en forma simbólica, por ejemplo:
Las reglas dicen que se permite cualquier formato de salida, por lo que puede ser válido. Esto es mayor que 10 10 19727 , que es mayor que cualquiera de las otras entradas aquí, excepto por el factorial repetido.
Sin embargo,
es mayor que el factorial repetido. El número más grande que puedo obtener en diez caracteres es:
Esto es increíblemente enorme, el Universo no es lo suficientemente grande como para representar una parte significativa de sus dígitos, incluso si tomaste registros repetidos del número.
fuente
ack(4,2)+1
solución.ack(4,2)
es entrada no válida. La entrada del lenguaje natural de W | A ni siquiera debería contar como un lenguaje de programación. No está completo en Turing, y no puede escribir ni siquiera programas básicos como el algoritmo de Euclides. Por esta razón, no creo que esta sea una respuesta válida más de lo que lo sería una consulta de Google.Python2 shell, 3,010,301 dígitos
Cálculo de la longitud: Python agregará una "L" a estos números largos, por lo que informa 1 carácter más que el resultado tiene dígitos.
Primeros y últimos 20 dígitos:
fuente
9 * 2**9999999
, por lo que uno podría argumentar que usa exponenciación.***built-in*** exponentiation functions
no están permitidos, por lo que esto podría deslizarse bajo las reglas. +1floor(log10(9 * 2**9999999))+1
CJam, 2 × 10 268,435,457
Esto calcula b , definido como sigue:
a 0 = 10
a n = a n - 1 2
b = 20 × a 28
Antecedentes
Esto sigue la misma idea que la respuesta de Claudiu , pero no se basa en ella. Tuve una idea similar que publiqué solo unos minutos después de que él publicara la suya , pero la descarté porque no se acercaba al límite de tiempo.
Sin embargo, la sugerencia de aditsu de actualizar a Java 8 y mi idea de usar potencias de 10 le permitió a CJam calcular números más allá del alcance de GolfScript, lo que parece deberse a algunos errores / limitaciones de Ruby's Bignum.
Cómo funciona
CJam, ≈ 8.1 × 10 1,826,751
Toma menos de cinco minutos en mi máquina, por lo que todavía hay margen de mejora.
Esto calcula un 20 , definido de la siguiente manera:
a 0 = 20
a n = (n × a n - 1 ) 2
Cómo funciona
fuente
Python 3, 9 * 2 ^ (7 * 2 ^ 33)> 10 ^ 18,100,795,813
9 * 2 ^ (2 ^ 35)> 10 ^ 10,343,311,894Editar: Mi nueva respuesta es:
Antigua respuesta, para la posteridad:
Diez personajes exactamente.
Estoy imprimiendo el número en hexadecimal, y
Por lo tanto, mi código actual es:
Prueba de que se ejecuta en el tiempo especificado y genera un número del tamaño especificado:
Mi número> 10 ^ (15032385538 * log (16))> 10 ^ 18100795813
3 dígitos hexadecimales menos que la impresión wc anterior debido a la inicial
0x9
.Python 3 es necesario porque en python 2
7<<33
sería largo y<<
no toma mucho tiempo como entradas.No puedo usar 9 << (1 << 36) en su lugar porque:
Por lo tanto, este es el mayor número posible del formulario
a<<(b<<cd)
imprimible en mi computadora.Con toda probabilidad, la máquina más rápida del mundo tiene más memoria que yo, por lo que mi respuesta alternativa es:
9 * 2 ^ (9 * 2 ^ 99)> 10 ^ (1.7172038461 * 10 ^ 30)
Sin embargo, mi respuesta actual es la más grande que alguien haya enviado, por lo que probablemente sea lo suficientemente buena. Además, todo esto supone que el cambio de bits es permisible. Parece ser, de las otras respuestas que lo usan.
fuente
Cualquier idioma con nombres constantes lo suficientemente cortos, 18 dígitos aprox.
¡Publicaría esto como una respuesta de PHP, pero lamentablemente
M_PI
hace que esto sea demasiado largo! Pero PHP produce 8.0839634798317E + 17 para esto. Básicamente, abusa de la falta de precisión absoluta en PI: pfuente
(/ 99(sin pi))
(14 caracteres). Error en TI-83:99/sin(π
(8 caracteres) causa división por cero. Trabaja en LibreOffice Calc :=99/SIN(PI(
(10 caracteres, sin contar=
) calcula 808423047055000000. LibreOffice auto-insertos de los dos últimos))
en=99/SIN(PI())
.99/sin(π
cinco bytes u ocho? Sé que TI-BASIC almacena un montón de comandos como bytes individuales; essin(
uno de ellos?Haskell
Sin ningún truco:
Posiblemente sin calcular nada:
Adaptando la respuesta de Niet :
fuente
floor(infinity)
es un numero finito? ¿Qué demonios Haskell?isInfinite $ 1 / 0 -- True
. Por lo que puedo decir, IEEE 754 define1 / 0
como infinito.1 / 0 == Infinity
.Powershell - 1.12947668480335E + 42
Multiplica 99 Pebibytes por 9,000,000,000 Pebibytes.
fuente
J (
((((((((9)!)!)!)!)!)!)!)!
)Si, eso es mucho.
10^(10^(10^(10^(10^(10^(10^(10^6.269498812196425)))))))
para no ser muy exactofuente
!!9x
no imprimí nada en la pantalla. Sinceramente dudo que!!!!!!!!9x
habrá siempre ser calculado.!!9x
finalmente se imprimió en la pantalla. Estoy impresionado de que realmente calculó el valor, pero todavía falla completamente la viñeta 5.K / Kona :
8.977649e2611.774896e308!170
crea un vector de números del 0 al 1691.6+
agrega uno a cada elemento del vector y convierte a reales (el rango es de 1.6 a 170.6)*/
multiplica cada elemento de la matriz juntosSi Kona admitiera la precisión cuádruple, podría hacerlo
*/9.+!999
y obtener 1e2584. Lamentablemente, no lo hace y estoy limitado a doble precisión.método antiguo
!99
crea un vector de números del 0 al 989+
agrega 9 a cada elemento del vector (ahora varía de 9 a 107)9.*
multiplica cada elemento por 9.0 (convirtiendo implícitamente a reales, por lo que 81.0 a 963.0)*/
multiplica cada elemento del vector juntosfuente
HTML, 9999999999
.. dado en el clavo.
fuente
9^9999
impresiones9^9999
. Solo digo :)PHP_INT_MAX
es 11Python - Varía, hasta 13916486568675240 (hasta ahora)
No del todo serio, pero pensé que sería divertido.
De todas las cosas que probé, me
len
estaba dando consistentemente identificadores grandes.Obtuve 13916486568675240 (17 dígitos) en mi computadora y 13842722750490216 (también 17 dígitos) en este sitio . Supongo que es posible que esto te dé tan bajo como 0, pero también podría ir más alto.
fuente
calculate
nada.*99
parte invoca un cálculo.id(id)
oid(0j)
, puede multiplicar por999
vars
consistentemente da el valor más alto (pero 4 caracteres) seguido desum
. Useprint(sorted([(id(x),x)for x in[id,len,max,min,str,int,ord,chr,sum,map,abs,all,any,bin,bool,eval,oct,vars,iter,list,set,repr,round,zip,type,pow,dict,dir,hex]])[::-1])
para verificar.Golfscript, 1e + 33,554,432
Computa
10 ^ (2 ^ 25)
, sin usar exponentes, se ejecuta en 96 segundos:Puede calcular hasta
9 ^ (2 ^ 9999)
, si solo se le da suficiente tiempo, pero el incremento del exponente interno en uno hace que tome ~ el triple del tiempo, por lo que el límite de una hora se alcanzará muy pronto.Explicacion :
Usando una versión anterior con la misma idea:
Desglosándolo:
La pila al comienzo de cada bloque consta de un número, el número actual. Esto comienza como
8
. Entonces:Entonces, la pila, paso a paso, se ve así:
... etc. Escrito en notación matemática, la progresión es:
fuente
wc
. Lo editaré para que quede más clarowc -c
para10{.*}25
entrega 33,554,434 dígitos y termina en 90 segundos en mi máquina. No sé por qué, pero10{.*}26*
no imprime nada.wxMaxima ~ 3x10 49,948 (o 10 8,565,705,514 )
La salida es
No estoy seguro si se ajusta bastante a las especificaciones (particularmente el formato de salida uno), pero puedo golpear aún más grande:
La salida es
Eso es aproximadamente 10 8,565,705,514, que es significativamente más grande que la mayoría de las respuestas principales y se calculó en aproximadamente 2 segundos. La
bfloat
función da precisión arbitraria .fuente
Haskell, 4950
Aww hombre, eso no es mucho! 10 caracteres comienzan después del signo de dólar.
fuente
print
? Además,9/0.000001
es mayor quesum[1..99]
.Mathematica, 2.174188391646043 * 10 ^ 20686623745
Diez personajes exactamente.
fuente
Python shell,
649539999890001Supera a Haskell, no es realmente una respuesta seria.
fuente
calculate
la respuesta.9**9**9**9
es correcta, ya que es un operador aritmético (no una función incorporada).Wolfram Alpha (¿un sitio web cuenta como idioma)?
salidas
Gracias a Cory por el consejo de que los espacios funcionan tan bien como los parens.
fuente
((99!)!)! > 4
nunca regresa.Befunge-93 (1,853,020,188,851,841)
Me alegro de que nadie haya hecho Befunge todavía (es mi nicho), pero maldita sea, no puedo encontrar ningún truco inteligente para aumentar el número.
Entonces son 9 ^ 16.
Básicamente multiplica el valor en la parte superior de la pila consigo mismo. Entonces, el valor en la parte superior de la pila va:
y
Emite el valor final. Me interesaría ver si alguien tiene mejores ideas.
fuente
Prefiero publicar esto como un comentario arriba, pero aparentemente no puedo ya que soy un novato.
Pitón:
9<<(2<<29)
Iría con un cambio de bit más grande, pero Python parece querer que el operando correcto de un cambio sea un número entero no largo. Creo que esto se acerca al máximo teórico:
9<<(7<<27)
El único problema con estos es que podrían no satisfacer la regla 5.
fuente
Matlab (1.7977e + 308)
Matlab almacena el valor del número de punto flotante más grande (precisión doble) en una variable llamada
realmax
. Invocarlo en la ventana de comando (o en la línea de comando) imprime su valor:fuente
realmax+1
. Lo intenté por diversión y sorpresa, devuelve exactamente el mismo número que tú (luego me reí cuando me di cuenta ...eps(realmax)=1.99584030953472e+292
).Python, ca. 1.26e1388
Da:
fuente
Al menos Python 3.5.0 (64 bits), más de 10 ^ 242944768872896860
En un mundo ideal, esto sería
9<<(1<<63)-1
, pero no hay suficientes bytes para eso. Este número es tan grande que requiere casi 1 EiB de memoria para mantenerlo, que es un poco más de lo que tengo en mi computadora. Afortunadamente, solo necesita usar alrededor del 0.2% del espacio de almacenamiento del mundo como intercambio para mantenerlo. El valor en binario es1001
seguido por 8070450532247928832 ceros.Si Python sale para máquinas de 128 bits, el máximo sería
9<<(9<<99)
, lo que requiere menos de 1 MiYiB de memoria. Esto es bueno, porque tendría suficiente espacio direccionable para almacenar el intérprete de Python y el sistema operativo.fuente
Cubix , 9.670457478596419e + 147 (no competidor)
No competir porque Cubix es más nuevo que este desafío. Puede probarlo en línea aquí , pero tenga en cuenta que en realidad no imprime el número; tendrá que pausar el programa después de
*
ejecutar los últimos dos segundos para ver el valor en la pila.Cómo funciona
Cubix es un esolang bidimensional donde el código se envuelve alrededor de un cubo. Este código es exactamente equivalente al siguiente cubo de red, donde
.
es un no-op:Luego se ejecuta el código, con el puntero de instrucción (IP) comenzando en la esquina superior izquierda de la cara más a la izquierda, hacia la derecha.
"
activa el modo de cadena, donde todos los caracteres encontrados hasta el siguiente"
empujan sus códigos de caracteres a la pila. La IP envuelve todo el código, empujando tres/
s (47), dos*
s (42) y dos.
s (46) a la pila, antes de salir nuevamente del modo de cadena.Aquí es donde se pone interesante. El primer espejo
/
refleja la IP, por lo que está hacia arriba; luego gira alrededor del cubo, golpeando estos caracteres:Los tres
*
s multiplican los dos primeros elementos de la pila. Ahora, a diferencia de la mayoría de los lenguajes basados en pila donde los operadores aritméticos hacen estallar sus argumentos, Cubix deja los valores anteriores en la pila. Eso significa que esto calcula46*46 = 2116, 46*2116 = 97336, 2116*97336 = 205962976
.Cuando la IP llega de
/
nuevo, se gira a la derecha. Luego golpea el siguiente espejo y sigue este camino:Los dos asteriscos multiplican los dos elementos superiores una vez más. Luego, el espejo dirige la IP nuevamente a la derecha, y el tercer espejo repite el proceso una vez más:
Finalmente, la IP deja la sección de espejo en dirección este. Los dos últimos asteriscos se multiplican dos veces más, dejando un resultado de 9.670457478596419e + 147 en la pila. Esto podría imprimirse
O
, pero no hay una manera fácil de hacerlo, ya que prácticamente todos los puntos en el cubo ya están en uso.fuente
Scala, 2 63 -1
Pobre, pobre Scala. Toma al menos 8 caracteres para obtener un
BigInt
valor, que no deja suficiente espacio para que sea grande.Pero con solo 7 caracteres de código (contado), podemos imprimir el mayor positivo posible
Long
:fuente
Brainf ** k 256 - 2147483647
Si ignora el hecho de que la mayoría de los compiladores e intérpretes generan datos como equivalentes ascii (sea eficiente, es lo que es;)) , esto devolverá el valor máximo del tipo de datos del intérprete / compilador.
En algunos sistemas esto es solo 256, aunque en algunos (el mío, por ejemplo), este es el valor máximo de un entero de 32 bits, es decir, 2 147 483 647.
Editar:
Imprimirá lo mismo en muchos menos caracteres
fuente
-1
en intérpretes que usan valores firmados para la cintaPerl, no compitiendo
Estoy usando esto para resaltar un pequeño rincón de perl.
Perl realmente no puede competir en este caso porque no tiene bignums incorporados (por supuesto, podría cargar una biblioteca de bignum).
Pero lo que todos saben no es del todo cierto. Una función central en realidad puede manejar grandes números.
El
pack
formatow
puede convertir un número natural de cualquier tamaño entre base10
y base128
. Sin embargo, el entero base 128 se representa como bytes de cadena. La cadena de bits sexxxxxxxyyyyyyyzzzzzzz
convierte en bytes:1xxxxxxx 1yyyyyyy 0zzzzzzz
(cada byte comienza con 1 excepto el último). Y puede convertir dicha cadena a base 10 con descomprimir. Entonces puedes escribir código como:lo que da:
Puede reemplazarlos
4**4
por valores más grandes hasta que sienta que toma demasiado tiempo o usa demasiada memoria.Desafortunadamente, esto es demasiado largo para el límite de este desafío, y puede argumentar que el resultado de base 10 se convierte en una cadena antes de convertirse en el resultado, por lo que la expresión realmente no produce un número. Pero internamente, Perl realmente hace la aritmética necesaria para convertir la entrada a la base 10, que siempre consideré bastante ordenada.
fuente
TI-36 (no 84, 36), 10 bytes, aprox. 9.999985426E99
Las calculadoras más antiguas también se pueden programar hasta cierto punto;)
69!58.4376
Esto está muy cerca del rango máximo que puede mostrar una calculadora TI:
-1E100<x<1E100
fuente
Perl 6 , 456,574 dígitos
No hay TIO porque tarda 2 minutos en ejecutarse.
fuente