Mayor número en diez bytes de código.


77

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.)
  • 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 xsintaxis, 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+100etc.)
  • El infinito es un concepto abstracto , no un número. Entonces no es una salida válida.


21
¿Qué quieres decir exactamente con "calcular"? Además, 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
demore

44
¿Bit-shift cuenta como un operador de exponenciación ya que es equivalente a * 2^x?
Claudiu

14
El hecho de que el límite de tiempo dependa del rendimiento de la computadora más rápida del mundo nos hace imposible determinar el conjunto de respuestas válidas ... Realmente no me gusta eso
David Z

66
Las funciones de exponenciación no están permitidas, pero la función de Ackermann está permitida. Eso parece realmente arbitrario. No está claro por qué una manipulación simbólica se considera "calcular" el número.
WolframH

Respuestas:


26

Wolfram Language

ack(9!,9!)

ack (9!, 9!) =ingrese la descripción de la imagen aquí

La salida está en notación de flecha.


3
@KyleKanos Es diferente porque el código / programa no está llamando a la web. Otros ejemplos typescriptlang.org/Playground tryfsharp.org/Learn/getting-started
Adam Speight

35
Wolfram Language está disponible para usar una Raspberry Pi y no requiere acceso web. Entonces no está en violación de esa regla.
Adam Speight

66
Creo que es una respuesta muy válida. Estúpido razonamiento para estar en la isla y no tener acceso a internet. El requisito 'No web' es solo para evitar la impresión de un recurso ya disponible. Todas las respuestas son válidas siempre que "ejecuten" un código para calcular la salida. Viene la última versión de Visual Studio que ejecuta su código en la nube de Azure. ¿O no eres elegible si tienes Chromebook?
microbio

26
ack(99!,9)Es mucho, mucho más grande.
jimmy23013

11
Una de las otras respuestas dice que ack (4,2) es el más grande que puede calcular en una hora, por lo que me sorprendería si esto fuera así ...
Jerry Jeremiah

120

Perl,> 1.96835797883262e + 18

time*time

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 timehecho está limitado por el tamaño de entero / largo, por lo que en realidad algo así ~0siempre produciría un número mayor que time(es decir, el máximo timeadmitido por la arquitectura).

Esta no fue la respuesta más seria, ¡pero espero que la hayan disfrutado!


23
Votado porque me gusta la eventualidad
Tim

55
¿No se timeajustará y devolverá un número pequeño en algún momento? Depende de si es perl de 32 o 64 bits, supongo
Claudiu

3
1000 años ~ 3e10 segundos, por lo que todavía estará alrededor de 1e21 como su salida. ¿Quizás si esperara 1e50 años, podría comenzar a competir contra las otras respuestas?
Kyle Kanos

8
¿Pronuncias este "tiempo por tiempo"? :-) (hola Timwi!)
Pierre Arlaud

1
¿El tiempo en el calor de la muerte del universo representa el horario de verano? Podrías ganar unos segundos más de existencia.
Alfa

65

Wolfram ≅ 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:

$ ack(4,2)

200352993...719156733

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:

$ ack(4,3)

2↑²6 - 3 // using Knuth's up-arrow notation

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,

$ ack(9,9)

2↑⁷12 - 3

es mayor que el factorial repetido. El número más grande que puedo obtener en diez caracteres es:

$ ack(99,99)

2↑⁹⁷102 - 3

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.


85
No está mal, pero no es rival para mi ack(4,2)+1solución.
user19057

13
ack (4,2) +2,

1
Creo que ganaste.
Anónimo Pi

20
@Kyle, Yimin Hay muchas declaraciones engañosas en esta publicación y los comentarios debajo de ella. Este no es el lenguaje Wolfram, y no lo que se usa como backend de W | A. Es simplemente una entrada de "lenguaje natural" a Wolfram | Alpha. En Wolfram Language 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.
Szabolcs

44
Wolfram Language es el lenguaje de programación utilizado en Mathematica, documentado aquí . Wolfram | Alpha toma el lenguaje natural como entrada, no el Wolfram Language.
Szabolcs

30

Python2 shell, 3,010,301 dígitos

9<<9999999

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.

>>> len(repr( 9<<9999999 ))
3010302

Primeros y últimos 20 dígitos:

40724177878623601356... ...96980669011241992192

2
¡Maldita sea! Esto apareció mientras escribía la misma respuesta
James_pic

2
Eso es realmente justo 9 * 2**9999999, por lo que uno podría argumentar que usa exponenciación.
Dennis

2
Espere, ***built-in*** exponentiation functionsno están permitidos, por lo que esto podría deslizarse bajo las reglas. +1
user80551

1
Manera matemática de calcular la duración:floor(log10(9 * 2**9999999))+1
Justin

8
9 << (9 << 99) es mucho más grande, si termina.
Keith Randall

29

CJam, 2 × 10 268,435,457

A28{_*}*K*

Esto calcula b , definido como sigue:

  • a 0 = 10

  • a n = a n - 1 2

  • b = 20 × a 28

$ time cjam <(echo 'A28{_*}*K*') | wc -c
Real    2573.28
User    2638.07
Sys     9.46
268435458

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

A    " Push 10.                                                          ";
28{  " Do the following 28 times:                                        ";
  _* " Duplicate the integer on the stack and multiply it with its copy. ";
}*   "                                                                   ";
K*   " Multiply the result by 20.                                        ";

CJam, ≈ 8.1 × 10 1,826,751

KK,{)*_*}/

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

KK,   " Push 20 [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ]. ";
{     " For each integer in the array:                                 ";
  )*  " Increment it and compute the its product with the accumulator. ";
  _*  " Multiply the result with itself.                               ";
}/

21
Jaja, ¿es Kirby? :)
aditsu

¿Podría describir lo que está haciendo esto?
Kyle Kanos

2
Para su información, realicé algunas pruebas para verificar el rendimiento de BigInteger: ¡calculé 100000! y convertido a cadena. Resultados: java 6: cálculo de 21 segundos, 44 segundos para String; Java 7: cálculo de 14 segundos, 42 segundos para String; java 8: 5 seg cálculo, 1 seg toString!
aditsu

1
@aditsu: ¡Actualizar Java redujo el tiempo de ejecución de 5 minutos a 2 segundos!
Dennis

20

Python 3, 9 * 2 ^ (7 * 2 ^ 33)> 10 ^ 18,100,795,813

9 * 2 ^ (2 ^ 35)> 10 ^ 10,343,311,894

Editar: Mi nueva respuesta es:

9<<(7<<33)

Antigua respuesta, para la posteridad:

9<<(1<<35)

Diez personajes exactamente.

Estoy imprimiendo el número en hexadecimal, y

Puede excluir del límite de 10 caracteres cualquier código necesario para imprimir cualquier cosa. Por ejemplo, en Python 2, que usa la sintaxis print x, puede usar hasta 16 caracteres para su programa.

Por lo tanto, mi código actual es:

print(hex(9<<(7<<33)))

Prueba de que se ejecuta en el tiempo especificado y genera un número del tamaño especificado:

time python bignum.py > bignumoutput.py

real    10m6.606s
user    1m19.183s
sys    0m59.171s
wc -c bignumoutput.py 
15032385541 bignumoutput.py

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<<33sería largo y <<no toma mucho tiempo como entradas.

No puedo usar 9 << (1 << 36) en su lugar porque:

Traceback (most recent call last):
  File "bignum.py", line 1, in <module>
    print(hex(9<<(1<<36)))
MemoryError

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<<(9<<99)

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.


Hasta ahora, esta parece ser la respuesta más grande con diferencia. Es un número de 10,000,000,000 dígitos, después de todo.
nneonneo

1
@nneonneo: Creo que mi solución es más grande :)
Zaid

Su respuesta alternativo requiere juuuuust menos de 1 MiYiB de la memoria, y requiere 100 bits de memoria direccionable (por lo que no funcionará hasta Python al menos 128 bits). (Fuente: mi respuesta similar )
wizzwizz4

19

Cualquier idioma con nombres constantes lo suficientemente cortos, 18 dígitos aprox.

99/sin(PI)

¡Publicaría esto como una respuesta de PHP, pero lamentablemente M_PIhace 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: p


1
¿No puedes hacer bronceado (PI / 2)?
user80551

1
@ user80551 Podría hacerlo, pero me di cuenta de que podía usar ese último carácter restante en el límite para aumentar mi resultado 99 veces.
Niet the Dark Absol

Demasiado tiempo en Common Lisp: (/ 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()).
kernigh

Depende de la precisión del idioma. En PHP 14 dígitos decimales es un valor común.
kenorb

@kernigh No importa en este caso, ¿pero serían 99/sin(πcinco bytes u ocho? Sé que TI-BASIC almacena un montón de comandos como bytes individuales; es sin(uno de ellos?
wchargin

16

Haskell

Sin ningún truco:

main = print -- Necessary to print anything
    $9999*9999 -- 999890001

Posiblemente sin calcular nada:

main = print
    $floor$1/0 -- 179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216

Adaptando la respuesta de Niet :

main = print
    $99/sin pi -- 8.083963479831708e17

La tercera viñeta dice "Su programa debe calcular ..."
user80551

8
floor(infinity)es un numero finito? ¿Qué demonios Haskell?
nneonneo

3
1/0! = Infinito, no está definido.
RubberDuck

1
¿Estás seguro de eso, @ ckuhn203? En GHC 7.6.3 y 7.8.2, me sale isInfinite $ 1 / 0 -- True. Por lo que puedo decir, IEEE 754 define 1 / 0 como infinito.
Taylor Fausak

2
Oh, te refieres matemáticamente. Concuerdo completamente. Pero en lo que se refiere a la programación con punto flotante IEEE (y Haskell en particular), 1 / 0 == Infinity.
Taylor Fausak

15

Powershell - 1.12947668480335E + 42

99PB*9E9PB

Multiplica 99 Pebibytes por 9,000,000,000 Pebibytes.


77
98901 petabytes cuadrados? ¿Es algún tipo de método para medir la densidad de bits de superficie de los discos duros (futuros de alta capacidad)?
user80551

Oh bien. No sabía que los pebibytes eran posibles ahora. Siempre pensé que se detenía en tebibytes.
Joey

@Joey Ahora, si MS solo se apurara y agregara yobibytes, la respuesta podría ser aún mejor.
Rynant

1
Podría agregar eso a Pash si ayuda ... ;-)
Joey

1+ "1" * 309 genera 1.1111e308, aunque supongo que esto rompe el espíritu, si no la palabra de la regla sobre la impresión de caracteres. Se lanza a un doble para la salida.
tomkandy

14

J ( ((((((((9)!)!)!)!)!)!)!)!)

Si, eso es mucho. 10^(10^(10^(10^(10^(10^(10^(10^6.269498812196425)))))))para no ser muy exacto

!!!!!!!!9x

55
Encontré un compilador , pero después de 20 minutos, !!9xno imprimí nada en la pantalla. Sinceramente dudo que !!!!!!!!9xhabrá siempre ser calculado.
Kyle Kanos

16
"Si tarda más de una hora en ejecutarse en la computadora más rápida del mundo, no es válido". No estoy seguro de que esto sea válido ya que no se ejecuta dentro de una hora
Claudiu

11
Tardó 70 minutos, pero !!9xfinalmente se imprimió en la pantalla. Estoy impresionado de que realmente calculó el valor, pero todavía falla completamente la viñeta 5.
Kyle Kanos

66
@Quincunx: Probablemente cierto, sin embargo, la condición para una respuesta válida es que el programa debe tener éxito en la salida; esta respuesta falla completamente ese criterio. Lamentablemente, los votantes han descuidado todos los comentarios que lo señalan y todavía lo votaron sobre las respuestas de CJam & Golfscript que son increíblemente enormes y se calculan en un tiempo razonable.
Kyle Kanos

3
Voto negativo porque no imprime la respuesta.
isaacg

14

K / Kona : 8.977649e261 1.774896e308

*/1.6+!170
  • !170 crea un vector de números del 0 al 169
  • 1.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 juntos

Si Kona admitiera la precisión cuádruple, podría hacerlo */9.+!999y obtener 1e2584. Lamentablemente, no lo hace y estoy limitado a doble precisión.


método antiguo

*/9.*9+!99
  • !99 crea un vector de números del 0 al 98
  • 9+ 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 juntos


11

Python - Varía, hasta 13916486568675240 (hasta ahora)

No del todo serio, pero pensé que sería divertido.

print id(len)*99

De todas las cosas que probé, me lenestaba 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.


Gran idea pero desafortunadamente no hace calculatenada.
user80551

3
Creo que la *99parte invoca un cálculo.
comando

Oh sí, me siento estúpido ahora.
user80551

1
Si usa algo más corto, digamos id(id)o id(0j), puede multiplicar por999
gnibbler

1
Fuera de los nombres más pequeños en docs.python.org/2/library/functions.html , varsconsistentemente da el valor más alto (pero 4 caracteres) seguido de sum. Use print(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.
user80551

10

Golfscript, 1e + 33,554,432

10{.*}25*

Computa 10 ^ (2 ^ 25), sin usar exponentes, se ejecuta en 96 segundos:

$ time echo "10{.*}25*" | ruby golfscript.rb  > BIG10

real    1m36.733s
user    1m28.101s
sys     0m6.632s
$ wc -c BIG10
 33554434 BIG10
$ head -c 80 BIG10
10000000000000000000000000000000000000000000000000000000000000000000000000000000
$ tail -c 80 BIG10
0000000000000000000000000000000000000000000000000000000000000000000000000000000

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:

8{.*}25*

Desglosándolo:

8         # push 8 to the stack
{...}25*  # run the given block 25 times

La pila al comienzo de cada bloque consta de un número, el número actual. Esto comienza como 8. Entonces:

.         # duplicate the top of the stack, stack is now | 8 | 8 |
*         # multiply top two numbers, stack is now       | 64 |

Entonces, la pila, paso a paso, se ve así:

8
8 8
64
64 64
4096
4096 4096
16777216
16777216 16777216

... etc. Escrito en notación matemática, la progresión es:

n=0, 8                     = 8^1  = 8^(2^0)
n=1, 8*8                   = 8^2  = 8^(2^1)
n=2, (8^2)*(8^2) = (8^2)^2 = 8^4  = 8^(2^2)
n=3,               (8^4)^2 = 8^8  = 8^(2^3)
n=4,               (8^8)^2 = 8^16 = 8^(2^4)

¿Cuál es el trato con los dos delante del 2564 en su salida?
Kyle Kanos

@KyleKanos: Esa no es mi salida, es la salida de wc. Lo editaré para que quede más claro
Claudiu

podría usar wc -cpara
aclarar

¡Agradable! Tuve la misma idea hace unos minutos, pero funciona mucho más lento con CJam (lo cual es sorprendente, ya que es más rápido que GolfScript en general).
Dennis

1
Mejora menor: 10{.*}25entrega 33,554,434 dígitos y termina en 90 segundos en mi máquina. No sé por qué, pero 10{.*}26*no imprime nada.
Dennis

7

wxMaxima ~ 3x10 49,948 (o 10 8,565,705,514 )

999*13511!

La salida es

269146071053904674084357808139[49888 digits]000000000000000000000000000000

No estoy seguro si se ajusta bastante a las especificaciones (particularmente el formato de salida uno), pero puedo golpear aún más grande:

bfloat(99999999!)

La salida es

9.9046265792229937372808210723818b8565705513

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 bfloatfunción da precisión arbitraria .


6

Haskell, 4950

Aww hombre, eso no es mucho! 10 caracteres comienzan después del signo de dólar.

main=putStr.show$sum[1..99]

¿Por qué no solo print? Además, 9/0.000001es mayor que sum[1..99].
Taylor Fausak

55
A ese ritmo, podríamos considerar que 9 999 999 999 es un límite inferior en los resultados.
Keen

@TaylorFausak ¡Esta respuesta obviamente no debe tomarse en serio!
Flonk

6

Mathematica, 2.174188391646043 * 10 ^ 20686623745

$MaxNumber

Diez personajes exactamente.


77
¿Está calculando técnicamente algo, y está generando todos los dígitos y no solo la notación científica?

@Yimin: la salida puede estar en cualquier formato (para que pueda imprimir 999, 5e + 100, etc.)
edc65

El valor no se establece en tiempo de compilación, sino que depende de la máquina en particular en la que se ejecuta el comando. Creo que cuenta.
Michael Stern

5

Python shell, 649539 999890001

Supera a Haskell, no es realmente una respuesta seria.

99999*9999

66
9999999999 es más grande, ¿no?
MadTux

55
@MadTux Hay una restricción ambigua a calculatela respuesta.
user80551

1
Si esta respuesta es correcta, entonces la mía también 9**9**9**9es correcta, ya que es un operador aritmético (no una función incorporada).
kenorb

3
@kenorb Está construido en exponenciación que no está permitido.
user80551

5

Wolfram Alpha (¿un sitio web cuenta como idioma)?

9! ! ! ! !

salidas

10^(10^(10^(10^(10^(6.27...))))

Gracias a Cory por el consejo de que los espacios funcionan tan bien como los parens.


Estoy bastante seguro de que este es el número más grande en el hilo a partir de mi publicación, pero Wolfram se ahoga al compararlo con otros números, incluso ((99!)!)! > 4nunca regresa.
gggg

Esto va en contra de la regla que dice que no se puede obtener de la Web.
Kyle Kanos

1
¡Demasiados W | A's!
Anónimo Pi

55
No estoy de acuerdo con que esto rompa las reglas. No "lo lee de la web", lo que va en contra de las reglas, de hecho "calcula un solo número e imprime", que es lo que se supone que debe hacer. El hecho de que la única interfaz disponible sea un sitio web no significa que no pueda contar como un lenguaje de programación.
gggg

1
Es una respuesta completamente válida.
microbio

4

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.

9:*:*:*:*.

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:

9
81
6561
43046721
1853020188851841

y

.

Emite el valor final. Me interesaría ver si alguien tiene mejores ideas.



4

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.


3

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:

>> realmax

ans =

  1.7977e+308

Dado que el OP solicitó devolver un valor calculado , debe poner 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).
Hoki

3

Python, ca. 1.26e1388

9<<(9<<9L)

Da:

126026689735396303510997749074166929355794746000200933374690887068497279540873057344588851620847941756785436041299246554387020554314993586209922882758661017328592694996553929727854519472712351667110666886882465827559219102188617052626543482184096111723688960246772278895906137468458526847698371976335253039032584064081316325315024075215490091797774136739726784527496550151562519394683964055278594282441271759517280448036277054137000457520739972045586784011500204742714066662771580606558510783929300569401828194357569630085253502717648498118383356859371345327180116960300442655802073660515692068448059163472438726337412639721611668963365329274524683795898803515844109273846119396045513151325096835254352967440214290024900894106148249792936857620252669314267990625341054382109413982209048217613474462366099211988610838771890047771108303025697073942786800963584597671865634957073868371020540520001351340594968828107972114104065730887195267530118107925564666923847891177478488560095588773415349153603883278280369727904581288187557648454461776700257309873313090202541988023337650601111667962042284633452143391122583377206859791047448706336804001357517229485133041918063698840034398827807588137953763403631303885997729562636716061913967514574759718572657335136386433456038688663246414030999145140712475929114601257259572549175515657577056590262761777844800736563321827756835035190363747258466304L37634036313038859977295626367160619139675145747597185726573351363864334560386886632464140309991451407124759291146012572595725491755156575770565902727276177784480073656350252773773773773763403631303885997729562636716061913967514574759718572657335136386433456038688663246414030999145140712475929114601257259572549175515657577056590272727617778448007365635025277377377377


3

Al menos Python 3.5.0 (64 bits), más de 10 ^ 242944768872896860

print("{:x}".format( 9<<(7<<60) ))

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 es 1001seguido 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.


"Solo el 0.2% del espacio de almacenamiento del mundo"
Benjamin Urquhart

1
@BenjaminUrquhart Si crees que es bueno, ¿por qué no votar?
wizzwizz4

Ahí está tu doble voto;)
Benjamin Urquhart

3

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 calcula 46*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.


2

Scala, 2 63 -1

Pobre, pobre Scala. Toma al menos 8 caracteres para obtener un BigIntvalor, 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:

print(-1L>>>1)

2

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


Esa segunda respuesta se imprimirá -1en intérpretes que usan valores firmados para la cinta
Benjamin Urquhart

2

Perl, 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 packformato wpuede convertir un número natural de cualquier tamaño entre base 10y base 128. Sin embargo, el entero base 128 se representa como bytes de cadena. La cadena de bits se xxxxxxxyyyyyyyzzzzzzzconvierte 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:

unpack w,~A x 4**4 .A

lo que da:

17440148077784539048602210552864286760481312243331966651657423831944908597692986131110771184688683631223604950868378426010091037391551287028966465246275171764867964902846884403624214574779667949236313638077978794791039372380746518407204456880869394123452212674801443116750853569815557532270825838757922217314748231826241930826238846175896997055564919425918463307658663171965135057749089077388054942032051553760309927468850847772989423963904144861205988704398838295854027686335454023567793114837657233481456867922127891951274737700618284015425

Puede reemplazarlos 4**4por 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.


2

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

ingrese la descripción de la imagen aquí


2

Perl 6 , 456,574 dígitos

[*] 1..ↈ

No hay TIO porque tarda 2 minutos en ejecutarse.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.