Código más corto para la salida más larga [cerrado]


10

Este es bastante simple.

Escriba el programa más corto que pueda, mientras genera la mayor salida.

Para que sea divertido, los programas que producen una salida infinita serán descalificados.

El ganador es el programa con la mayor proporción de tamaño de salida / tamaño de código.

Los resultados se basan en lo que funciona en mi computadora, que es una Mac con Mac OS X 10.7.5 con un Intel Core i5 y 8 GB de memoria.


No está claro exactamente lo que estás preguntando. ¿Deben las respuestas asumir memoria sin límites, tamaños de índice sin límites, etc.?
Peter Taylor

@PeterTaylor Lo arreglé.
tbodt

55
Sorpréndete si puedo resolverlo, pero estoy seguro de que hay una manera de que algún intérprete interprete un archivo vacío y produzca cualquier contenido, lo que también daría una relación infinita .

8
@LegoStormtroopr GolfScript cumple los requisitos. Ejecutar un script vacío producirá exactamente un carácter de salida:\n
primo

1
@ user2509848 no, porque, como dije, la salida infinita no cuenta.
tbodt

Respuestas:


18

Python: código de 8 caracteres, salida de 387420489 caracteres - Relación: 48427561.125: 1

'a'*9**9

Podemos hacer que la relación tienda al infinito agregando más **9s:

'a'*9**9**9
'a'*9**9**9**9
etc.

Por ejemplo:

'a'*9**9**9**9**9**9

que tiene una relación de ~ 10 10 10 10 10 8.568 (número inimaginablemente grande).


Mejor que el otro ...
tbodt 03 de

@tbodt ¿Por qué? O_o @arshajii Si agrega suficientes **9s, ¿no se convertiría eventualmente Infinity?
Pomo de la puerta

@Doorknob Lo siento, no sé todo sobre Python. Ahora el desafío es: calcule la cantidad máxima de **9s que puede poner antes de que se convierta la salida Infinity.
tbodt

1
Los ints de @Doorknob Python tienen una precisión arbitraria.
arshajii

@tbodt Ver el comentario anterior.
arshajii

16

Entonces, todos estos son buenos programas que producen muchos resultados con muy poco código, pero ninguno de ellos es realmente corto ...

brainfuck, 5 caracteres, 255 bytes de salida

-[.-]

Creo que este es el único caso de uso en el que Brainfuck realmente sobresale. Sé que este no va a ganar, pero no creo que podamos hacerlo mejor que el ejemplo de Python. No solamente eso, pero...

brainfuck, 4 caracteres, salida infinita

-[.]

Supongo que este es el programa de salida infinita más corto que existe.

En realidad, espera, mi compañero acaba de encontrar uno realmente bueno.

Python, 80 bytes, cantidad desconocida de salida

from datetime import datetime
while datetime.now()!=datetime.max()
 print "This will probably get disqualified"

Este programa definitivamente se detendrá eventualmente, pero solo lo hará después de aproximadamente 8,000 años. El número exacto de caracteres de salida depende de la velocidad a la que su computadora puede producir caracteres.


1
Me gusta el Python One: D
Kevin Cox

2
"Supongo que este es el programa de salida infinita más corto que existe" no, aquí es donde el bucle implícito de Befunge (a través de Wraparound) resulta útil: .genera una secuencia infinita de 0 caracteres.
FireFly

14

Perl: salida de 19 bytes, 187200000000000000 bytes (9852631578947368.42: 1)

print+($]x9e7)x26e7

166 petabyes con una sola declaración de impresión, utilizando no más de 1.7GB de memoria.

Hay algunas cosas que hicieron que este desafío fuera más interesante de lo que pensé que sería. Perl parece negarse a asignar más de 1 GB de memoria a una sola lista. Por lo tanto, la referencia escalar de 4 bytes a la cadena interna solo puede repetirse 26e7 ≈ 2 28 veces. $]es el número 'Perl versión antigua', que, como una cadena, es de 8 bytes de longitud, que se asemeja 5.016002.

Con más memoria del sistema, debería poder ir más alto. Suponiendo que los 8GB completos estuvieran realmente disponibles, debería poder usarlos $]x9e8para la cadena interna, lo que generaría 1,62 exabytes.


16
"Si le das a 1,000,000 de monos 1,000,000 de máquinas de escribir y les das 1,000,000 de años para escribir, un mono eventualmente escribirá un programa Java. Los otros solo producirán guiones de Perl". Eso fue lo que pensé cuando vi esto: fuente
Pomo de la puerta

5

Ruby y Python, 13 caracteres, salida de caracteres 599994, relación ~ 46153: 1

999999**99999

Simplemente eleva un número muy grande a la potencia de otro número muy grande. Tarda unos 20 segundos en correr. No puedo aumentar los números porque eso haría que el número se convirtiera en Infinito.

(Hice esto antes , actualmente estoy trabajando en hacer un bucle para una salida aún más larga)

Editar: lo hice!

Ruby, 28 caracteres, salida de caracteres 6e599999, relación ~ 6e599998 (creo)

a=999999**99999;a.times{p a}

No probado (por razones obvias), pero estoy bastante seguro de que el primer número es aproximadamente 1e599994, que multiplicado por 599994 es aproximadamente 6e599999. Teóricamente funcionaría, pero no estoy seguro de si bloquearía su computadora, por lo tanto, descargo de responsabilidad: no soy responsable si daña su computadora de alguna manera: P

Por supuesto, puedes continuar:

Rubí, 37 caracteres, salida de caracteres 6e359992800041, relación ~ 6e359992800040

a=999999**99999;a.times{a.times{p a}}

Y así sucesivamente, pero dudo que cualquier computadora pueda manejar eso: P


Eso es realmente un políglota ...
tbodt 03 de

@tbodt Jeje, ¡verdad! Sin embargo
Doorknob

5

Si se permitía una entrada infinita,

cat /dev/random

Como no lo es,

head -99 /dev/random

(Salida 25128: 20 entradas = 1256.4: 1)

No estoy en una caja de Linux, pero imagino que podrías hacer algo como

timeout 99d cat /dev/random

y obtener una gran salida. (a través de la respuesta de GigaWatt)


2
Puede sustituir un carácter y hacer su salida de 8562 veces más: timeout 99d. Sí, tiempo de ejecución de 99 días. Además, no estoy seguro de esto, pero eventualmente vaciará el grupo de entropía /dev/randomy se bloqueará, por lo que /dev/urandompuede ser más apropiado. (Logré obtener 40 MB / s con urandomy solo 128 KB / s con random)
Sr. Llama

@GigaWatt eso es increíble.
Tristin

4

HQ9 +, 11471

9

El recuento de caracteres real varía según el intérprete, pero probablemente alrededor de 10000 sería correcto.


¿Qué es HQ9 +? Nunca antes lo había escuchado.
tbodt

Ahh, lo siento, fue principalmente una broma ya que no es un lenguaje de programación 'real', pero: esolangs.org/wiki/HQ9%2B
Dom Hastings

2

C #: 108 caracteres. Relación: 742123445489230793057592: 1

for(ulong i=0;i<ulong.MaxValue;i++){Console.Write(new WebClient().DownloadString(@"http://bit.ly/dDuoI4"));}

Simplemente descarga e imprime la Lista de empleados de la wikipedia de la Corte Suprema de los Estados Unidos (4344904 caracteres) 18446744073709551615 veces.


Eso requiere un acortador de URL. No estoy seguro de eso.
tbodt

1
Okay. Y qué pasa con esto: for(ulong i=0;i<ulong.MaxValue;i++){Console.Write(new string('a',int.MaxValue));}2147483647 caracteres * 18446744073709551615 veces = 39614081238685424720914939905/81 => Ratio: 489062731341795366924875801
thepirat000

Mucho mejor. No se requiere acortador de URL.
tbodt

2

~ - ~! - Ratio: (64 4 4 4 64 ) / 154 ~ = 10 10 10 10 10 1.583328920493678

'=~~~~,~~~~,~~~~:''=|*<%[%]'=',',',':''&*-~|:'''=|*<%[%]''&',',',':'''&*-~|:''''=|*<%[%]'''&',',',':''''&*-~|:''''&':''=|*<%[%]@~~~~,~~~~,~~:''&*-~|:''&':

Cómo funciona: Primero, se establece 'en 4 ^ 3, o 64. Luego, realiza ''una función que se establece 'en '^ 4 * veces (donde * es su entrada). '''Luego se realiza una función que llama ''con la entrada como '^ 4. Luego, ''''se realiza una función que llama '''con '^ 4 como entrada. ''''luego se llama con una entrada de 64. Finalmente, ''se cambia a una función que imprime un espacio * veces; Esto se llama con una entrada de '.

Resulta que, al final, 'es 64 4 4 4 64 , y la duración de mi programa es 154 ; pon eso en Wolfram | Alpha y escupe 10 10 10 10 10 1.583328920493678 , que ni siquiera se molesta en calcular. Ni siquiera sé cuántos dígitos contiene , pero 64 4 4 contiene 463. Bastante bueno para un lenguaje que solo admite números explícitos unarios y no tiene una función de exponente; 3

Podría haber hecho esto mucho más grande, pero exagerado.


1

Javascript: 27 caracteres; 260,431,976 salida de caracteres; 9.645.628,74 ratio

for(s=i=61;s=btoa(s),i--;)s

Este código codifica recursivamente la entrada 61a Base64 61 veces. Codificar cualquier entrada de longitud na Base64 produce una salida de longitud n * 8/6, redondeada a un múltiplo de 4.

Esto debe ejecutarse desde un entorno de consola de JavaScript que admita de forma nativa la función de codificación Base64 btoa. (Cualquier navegador moderno, pero no Node.js.) Nota Chrome no puede ejecutarse más alto que i=61, mientras que Firefox solo puede alcanzar i=60. Tenga en cuenta también que la consola de Chrome no puede mostrar el resultado porque es demasiado grande, pero puede verificar el tamaño del resultado ejecutando

for(s=i=61;s=btoa(s),i--;)s.length

Si se permitiera que este programa funcionara al máximo i=99, produciría una producción hipotética de 14,566,872,071,840 (14.5 billones, 14.5e12) de caracteres, para una relación hipotética de alrededor de 540 mil millones (5.39e11).


1

Ruby, 23 caracteres - ~ 500000000000000 (5e14) Salida

while rand
puts 0
end

Ti-Basic 84, 13 caracteres - ~ 3000 de salida

:Disp 1
:prgmA

Nombra el programa prgmA


1

rubí, 283 96 44 caracteres

a=1e99.times;a{a{a{a{a{puts'a'*99}}}}}}}}}}

No es muy corto, pero lo compensa en la salida, que es tanto que aún no he podido medirlo.


2
según mis cálculos, esto se trataría de la 1e127producción de caracteres. de todos modos, la asignación a una variable reduciría el tamaño del código a la mitad. Además, 1e99es un número mayor que ocupa menos espacio. también, use en maplugar de each, use en putslugar de print, elimine espacios en blanco adicionales entre printy "ier.... También podría reemplazar esa cadena grande con 'a'*999(o incluso ?a*999) que es una cadena más larga que ocupa menos espacio. Resumen: esto no es en absoluto golfed
Pomo

@Doorknob Gracias. No sé nada sobre rubí, excepto el capítulo 3 de la conmovedora guía de rubí.
tbodt

sí, ¿por qué no solo asignas (0..1e99).mapuna variable? comoa=(0...1e99).map;a{a{a{a{a{puts'a'*99}}}}}
Pomo de la puerta

Mi intérprete de Ruby se quedó sin memoria evaluando a=(0...1e99).map. Es posible que desee tonificar eso un poco. 0..1e9usaría alrededor de 4 GB.
primo

1

Mathematica 9 chars Ratio: ~ 4564112: 1

La siguiente es una imagen de la entrada de Mathematica. No he descubierto cómo representarlo en SE.

exponentes

Aquí hay una captura de pantalla que muestra el número de dígitos en la salida. IntegerDigitsconvierte la salida a una lista de dígitos. Lengthcuenta el número de dígitos.

contar

Teclas para escribir: 9, ctrl6, 9, ctrl6, 9, ctrl6, 9, ctrl6, 9....


1
¿Qué? ¿Puedes escribir eso en Mathematica?
tbodt

Sí, esta es una entrada legítima a Mathematica.
DavidC

¿Y qué teclas se requieren?
tbodt

@tbodt Las pulsaciones de teclas ahora se muestran en la respuesta.
DavidC

1
No sé si tendría que especificar el orden, pero desea que calcule de arriba hacia abajo: (9 ^ 9) ^ 9 es un número de 78 dígitos, pero 9 ^ (9 ^ 9) es un número de 369,693,100 dígitos (gracias, wolframalpha)
SeanC

0

Befunge-93: 48 caracteres, aproximadamente ((2 ^ 32) ^ 2) * 10 caracteres de salida

La pila de Befunge es teóricamente infinita, pero los números que se almacenan en la pila están limitados al tamaño de un entero largo sin signo (aquí se supone que son 32 bits). Por lo tanto, para un intérprete de Befunge, (x + 1)> x es falso para el valor adecuado de x. Utilizamos este hecho para primero empujar todos los valores de cero al máximo (dos veces, con un número cada tres), y luego para cada valor en la pila, lo sacamos y lo decrementamos, luego lo sacamos cuando llega a cero. Finalmente, la pila se vacía y el programa termina. Puedo estar un poco fuera del tamaño de salida, pero debería estar en algún lugar de ese estadio.

>::1# + #1\`# :# _> #- #1 :# :# .# _# .# :# _@

0

C: 48 caracteres, aprox. (2 ^ 32-1) * 65090 bytes de salida

main(){for(int i=1<<31;i<~0;)puts("!");main();}

Tenga en cuenta que el 65090 no es exacto y depende del tamaño de la pila. El programa finalmente se detendrá cuando se bloquee. Además, podría simplemente poner una cadena cada vez más larga en gets () para hacer que la ración se acerque al infinito, pero eso parece bastante engañoso.


1
eso es un bucle infinito
izabera

Ay, tienes razón, creo. Veré si puedo encontrar la manera de arreglar eso.
Stuntddude

0

Java (131): cantidad desconocida pero finita

class A{public static void main(String[] args){while(Math.random()>0){for(long l=0;l!=-1;l++){System.out.println("1234567890");}}}}

Usando la baja probabilidad de Math.random () para llegar a 0 en un bucle y luego ir 2 ^ 64-1 bucles a través de un foreach con la salida 1234567890;


0

Python 3, 115 bytes, se ejecuta durante 7983 años (número desconocido de caracteres)

EDITAR: ymbirtt me ganó ._.

Lo sé, esto no es realmente corto, y sé que la otra respuesta de Python es mucho más larga, pero decidí darle una oportunidad.

El programa tiene una duración de aproximadamente 8000 años, lo cual, como saben, es bastante tiempo.

Lo que hace es obtener continuamente la hora actual usando la datetime.datetime.now()función, y la compara 9999-12-31 24:59:59.999999, que es hasta donde yo sé la fecha máxima en Python.

Si es que es igual, el programa se detiene. Si no es así, sale continuamente a.

import datetime
while 1:
    if str(datetime.datetime.now())=="9999-12-31 24:59:59.999999":exit
    else:print("a")

1
¿Y si te pierdes ese momento?
C5H8NNaO4

@ C5H8NNaO4 Si lo deja encendido durante todos los 7983 años, con suerte no lo perderá.
m654
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.