Kürzester Code für längste Ausgabe [geschlossen]

10

Dieser ist ziemlich einfach.

Schreiben Sie das kürzeste Programm, das Sie können, und generieren Sie dabei die meiste Ausgabe.

Damit es Spaß macht, werden Programme, die eine unendliche Ausgabe erzeugen, disqualifiziert.

Der Gewinner ist das Programm mit dem größten Verhältnis von Ausgabegröße zu Codegröße.

Die Ergebnisse basieren auf dem, was auf meinem Computer funktioniert , einem Mac mit Mac OS X 10.7.5, einem Intel Core i5 und 8 GB Speicher.

tbodt
quelle
Es ist nicht klar, was Sie genau fragen. Sollten Antworten unbegrenzten Speicher, unbegrenzte Indexgrößen usw. voraussetzen?
Peter Taylor
@ PeterTaylor Ich habe das behoben.
tbodt
5
Seien Sie begeistert, wenn ich es herausfinden kann, aber ich bin sicher, dass es eine Möglichkeit gibt, dass ein Dolmetscher eine leere Datei interpretiert und Inhalte erstellt - was auch ein unendliches Verhältnis ergeben würde .
8
@LegoStormtroopr GolfScript ist genau das Richtige. Das Ausführen eines leeren Skripts erzeugt genau ein Zeichen der Ausgabe:\n
Primo
1
@ user2509848 nein, da, wie gesagt, unendliche Ausgabe nicht zählt.
tbodt

Antworten:

18

Python: Code mit 8 Zeichen, Ausgabe von 387420489 Zeichen - Verhältnis: 48427561.125: 1

'a'*9**9

Wir können das Verhältnis gegen unendlich tendieren lassen, indem wir mehr **9s hinzufügen :

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

Beispielsweise:

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

das hat ein Verhältnis von ~ 10 10 10 10 10 8,568 (unvorstellbar große Zahl).

arshajii
quelle
Besser als der andere ...
tbodt
@tbodt Warum? O_o @arshajii Wenn Sie genug **9s hinzufügen , wird es dann nicht irgendwann Infinity?
Türknauf
@ Doorknob Sorry, ich weiß nicht alles über Python. Die Herausforderung besteht nun darin, die maximale Anzahl von **9s zu ermitteln, die Sie eingeben können, bevor die Ausgabe erfolgt Infinity.
tbodt
1
@ Doorknob Python-Ints haben eine beliebige Genauigkeit.
Arshajii
@tbodt Siehe den Kommentar oben.
Arshajii
16

Das sind also alles gute Programme, die mit sehr wenig Code viel Ausgabe produzieren, aber keines davon ist wirklich kurz ...

Brainfuck, 5 Zeichen, 255 Bytes Ausgabe

-[.-]

Ich denke, dies ist der einzige Anwendungsfall, in dem Brainfuck wirklich herausragend ist. Ich weiß, dass dieser nicht gewinnen wird, aber ich denke nicht, dass wir es möglicherweise besser machen können als das Python-Beispiel. Nicht nur das, sondern...

Brainfuck, 4 Zeichen, unendliche Ausgabe

-[.]

Ich vermute, dass dies das kürzeste Programm mit unendlicher Ausgabe ist.

Moment mal, mein Kumpel hat sich gerade einen wirklich guten ausgedacht.

Python, 80 Bytes, unbekannte Ausgabemenge

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

Dieses Programm wird definitiv irgendwann eingestellt, aber erst nach ungefähr 8.000 Jahren. Die genaue Anzahl der ausgegebenen Zeichen hängt von der Rate ab, mit der Ihr Computer Zeichen produzieren kann.

ymbirtt
quelle
1
Ich mag die Python: D
Kevin Cox
2
"Ich vermute, dass dies das kürzeste Programm mit unendlicher Ausgabe ist" Nein, hier ist Befunges implizite Schleife (über Wraparound) praktisch: .Gibt einen unendlichen Strom von 0 Zeichen aus.
FireFly
14

Perl - 19 Bytes, Ausgabe 187200000000000000 Bytes (9852631578947368.42: 1)

print+($]x9e7)x26e7

166 Petabyes mit einer einzigen Druckanweisung, die nicht mehr als 1,7 GB Speicher verbrauchen.

Es gibt ein paar Dinge, die diese Herausforderung interessanter gemacht haben, als ich gedacht hatte. Perl scheint sich zu weigern, einer einzelnen Liste mehr als 1 GB Speicher zuzuweisen. Daher kann die 4-Byte- Skalarreferenz auf die innere Zeichenfolge nur 26e7 ≈ 2 28 Mal wiederholt werden . $]ist die Nummer der 'alten Perl-Version', die als Zeichenfolge 8 Byte lang ist und ähnelt 5.016002.

Mit mehr Systemspeicher sollte es in der Lage sein, höher zu gehen. Angenommen, die vollen 8 GB $]x9e8wären tatsächlich verfügbar, sollten Sie stattdessen die innere Zeichenfolge verwenden können, die 1,62 Exabyte ausgeben würde.

primo
quelle
16
"Wenn Sie 1.000.000 Affen 1.000.000 Schreibmaschinen geben und ihnen 1.000.000 Jahre Zeit zum Schreiben geben, schreibt ein Affe schließlich ein Java-Programm. Die anderen erstellen nur Perl-Skripte." Das dachte ich mir, als ich das sah: P source
Doorknob
5

Ruby und Python, 13 Zeichen, 599994 Zeichenausgabe, Verhältnis ~ 46153: 1

999999**99999

Erhöht einfach eine sehr große Zahl zur Potenz einer anderen sehr großen Zahl. Die Ausführung dauert ca. 20 Sekunden. Ich kann die Zahlen nicht erhöhen, da dies dazu führen würde, dass die Zahl unendlich wird.

(Ich habe das früher gemacht , ich arbeite gerade daran, eine Schleife für eine noch längere Ausgabe zu erstellen.)

Edit: Ich habe es geschafft!

Ruby, 28 Zeichen, 6e599999 Zeichenausgabe, ~ 6e599998 Verhältnis (glaube ich)

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

Ungetestet (aus offensichtlichen Gründen), aber ich bin mir ziemlich sicher, dass die erste Zahl ungefähr 1e599994 ist, multipliziert mit 599994 ungefähr 6e599999. Theoretisch würde es funktionieren, aber ich bin nicht sicher, ob es Ihren Computer zum Absturz bringen würde. Haftungsausschluss: Ich bin nicht verantwortlich, wenn es Ihren Computer in irgendeiner Weise schädigt: P.

Natürlich können Sie weitermachen:

Ruby, 37 Zeichen, 6e359992800041 Zeichenausgabe, Verhältnis ~ 6e359992800040

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

Und so weiter, aber ich bezweifle, dass jeder Computer damit umgehen kann: P.

Türknauf
quelle
Das ist wirklich ein Polyglot ...
tbodt
@tbodt Hehe, richtig! Wenn ich meine Änderungen hinzufüge, wird es jedoch nicht sein
Türknauf
5

Wenn unendliche Eingabe erlaubt war,

cat /dev/random

Da ist es nicht,

head -99 /dev/random

(25128 Ausgabe: 20 Eingabe = 1256,4: 1)

Ich bin nicht auf einer Linux-Box, aber ich kann mir vorstellen, dass Sie so etwas tun könnten

timeout 99d cat /dev/random

und erhalten eine riesige Ausgabe. (über die Antwort von GigaWatt)

Tristin
quelle
2
Sie können ein Zeichen ersetzen und Ihre Ausgabe 8562-mal verlängern : timeout 99d. Ja, 99 Tage Laufzeit. Ich bin mir auch nicht sicher, aber irgendwann werden Sie den Entropiepool mit leeren /dev/randomund er wird blockieren, daher ist dies /dev/urandommöglicherweise angemessener. (Ich habe es geschafft, 40 MB / s mit urandomund nur 128 KB / s mit random)
Mr. Llama
@GigaWatt das ist super.
Tristin
4

HQ9 +, 11471

9

Die tatsächliche Anzahl der Zeichen variiert je nach Interpreter, aber wahrscheinlich wären etwa 10000 richtig?

Dom Hastings
quelle
Was ist HQ9 +? Davon habe ich noch nie gehört.
tbodt
Ahh, sorry, es war meistens ein Witz, da es keine "echte" Programmiersprache ist, aber: esolangs.org/wiki/HQ9%2B
Dom Hastings
2

C #: 108 Zeichen. Verhältnis: 742123445489230793057592: 1

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

Es lädt nur die Wikipedia- Liste der Gerichtsschreiber des Obersten Gerichtshofs der Vereinigten Staaten (4344904 Zeichen) 18446744073709551615 mal herunter und druckt sie aus .

thepirat000
quelle
Das erfordert einen URL-Shortener. Da bin ich mir nicht sicher.
tbodt
1
In Ordnung. Und was ist damit: for(ulong i=0;i<ulong.MaxValue;i++){Console.Write(new string('a',int.MaxValue));}2147483647 Zeichen * 18446744073709551615 mal = 39614081238685424720914939905/81 => Verhältnis: 489062731341795366924875801
thepirat000
Viel besser. Kein URL-Shortener erforderlich.
tbodt
2

~ - ~! - Verhältnis: (64 4 4 4 64 ) / 154 ~ = 10 10 10 10 10 1,583328920493678

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

So funktioniert es: Zuerst wird 'auf 4 ^ 3 oder 64 gesetzt. Dann wird ''eine Funktion erstellt, die 'auf '^ 4 * mal gesetzt wird (wobei * die Eingabe ist). '''wird dann eine Funktion gemacht, die ''mit der Eingabe als '^ 4 aufruft . Dann ''''wird eine Funktion erstellt, die '''mit '^ 4 als Eingabe aufruft . ''''wird dann mit einer Eingabe von 64 aufgerufen. Schließlich ''wird in eine Funktion geändert, die ein Leerzeichen * mal druckt; Dies wird dann mit einer Eingabe von aufgerufen '.

Es stellt sich heraus, am Ende, 'ist 64 4 4 4 64 und die Länge meines Programms ist 154 ; Wenn Sie das in Wolfram | Alpha eingeben , spuckt es 10 10 10 10 10 1,583328920493678 aus , was es nicht einmal zu berechnen braucht. Ich weiß nicht einmal, wie viele Ziffern es enthält , aber 64 4 4 enthält 463. Ziemlich schön für eine Sprache, die nur unäre explizite Zahlen unterstützt und keine Exponentenfunktion hat; 3

Ich hätte das viel größer machen können, aber übertrieben.

cjfaure
quelle
1

Javascript: 27 Zeichen; 260.431.976 Zeichenausgabe; Verhältnis 9.645.628,74

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

Dieser Code codiert die Eingabe 6161 Mal rekursiv in Base64. Wenn Sie eine Längeneingabe nin Base64 codieren, wird eine Längenausgabe erstellt n * 8/6, die auf ein Vielfaches von 4 aufgerundet wird.

Dies muss in einer JavaScript-Konsolenumgebung ausgeführt werden, die die Base64-Codierungsfunktion nativ unterstützt btoa. (Jeder moderne Browser, aber nicht Node.js.) Hinweis Chrome kann nicht höher als ausgeführt werden i=61, während Firefox nur erreichen kann i=60. Beachten Sie auch, dass die Chrome-Konsole die Ausgabe nicht anzeigen kann, da sie zu groß ist. Sie können die Ergebnisgröße jedoch überprüfen, indem Sie sie ausführen

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

Wenn dieses Programm maximal ausgeführt werden könnte i=99, würde es eine hypothetische Ausgabe von 14.566.872.071.840 (14,5 Billionen, 14.5e12) Zeichen für ein hypothetisches Verhältnis von etwa 540 Milliarden (5.39e11) erzeugen.

Apsiller
quelle
1

Ruby, 23 Zeichen - ~ 500000000000000 (5e14) Ausgabe

while rand
puts 0
end

Ti-Basic 84, 13 Zeichen - ~ 3000 Ausgabe

:Disp 1
:prgmA

Benennen Sie das Programm prgmA

Timtech
quelle
1

Rubin, 283 96 44 Zeichen

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

Nicht sehr kurz, aber es kompensiert es in der Ausgabe, was so viel ist, dass ich es noch nicht messen konnte.

tbodt
quelle
2
1e127Nach meinen Berechnungen würde es sich um eine Zeichenausgabe handeln. Wenn Sie einer Variablen zuweisen, wird die Codegröße ohnehin halbiert. Außerdem 1e99ist eine größere Zahl weniger Platz. Verwenden Sie mapstatt each, verwenden Sie putsstatt print, entfernen Sie zusätzliche Leerzeichen zwischen printund "ier.... Sie können diese große Zeichenfolge auch durch 'a'*999(oder sogar ?a*999) eine längere Zeichenfolge ersetzen , die weniger Platz benötigt. Zusammenfassung: Dies ist überhaupt nicht Golf
Türknauf
@ Doorknob Danke. Ich weiß nichts über Rubin, außer Kapitel 3 des ergreifenden Leitfadens für Rubin.
tbodt
Ja, warum ordnen Sie nicht einfach (0..1e99).mapeiner Variablen zu? wiea=(0...1e99).map;a{a{a{a{a{puts'a'*99}}}}}
Türknauf
Meinem Ruby-Interpreter ging die Speicherauswertung aus a=(0...1e99).map. Vielleicht möchten Sie das etwas abschwächen. 0..1e9würde etwa 4 GB verwenden.
Primo
1

Mathematica 9 Zeichen Verhältnis: ~ 4564112: 1

Das Folgende ist ein Bild der Mathematica-Eingabe. Ich habe nicht herausgefunden, wie ich es in SE rendern soll.

Exponenten

Hier ist ein Screenshot, der die Anzahl der Stellen in der Ausgabe zeigt. IntegerDigitskonvertiert die Ausgabe in eine Liste von Ziffern. Lengthzählt die Anzahl der Ziffern.

Anzahl

Keystrokes ein: 9, ctrl6, 9, ctrl6, 9, ctrl6, 9, ctrl6, 9....

DavidC
quelle
1
Was? Sie können das in Mathematica eingeben?
tbodt
Ja, dies ist eine legitime Eingabe für Mathematica.
DavidC
Und welche Tastenanschläge sind erforderlich?
tbodt
@tbodt Tastenanschläge werden jetzt in der Antwort angezeigt.
DavidC
1
Ich weiß nicht, ob Sie die Reihenfolge angeben müssten, aber Sie möchten, dass sie von oben nach unten berechnet wird: (9 ^ 9) ^ 9 ist eine 78-stellige Zahl, aber 9 ^ (9 ^ 9) ist eine 369.693.100-stellige Zahl (Danke, Wolframalpha)
SeanC
0

Befunge-93: 48 Zeichen, ungefähr ((2 ^ 32) ^ 2) * 10 Zeichen ausgegeben

Befunges Stapel ist theoretisch unendlich, aber die Zahlen, die der Stapel speichert, sind auf die Größe einer vorzeichenlosen langen Ganzzahl beschränkt (hier wird angenommen, dass sie 32 Bit beträgt). Für einen Befunge-Interpreter ist (x + 1)> x für den richtigen Wert von x falsch. Wir verwenden diese Tatsache, um zuerst alle Werte von Null auf das Maximum zu verschieben (zweimal, mit einer Eins jede dritte Zahl), und dann geben wir sie für jeden Wert auf dem Stapel aus, dekrementieren ihn und platzieren ihn dann, wenn er Null erreicht. Schließlich leert sich der Stapel und das Programm wird beendet. Ich bin vielleicht ein bisschen von der Ausgabegröße abweichend, aber es sollte irgendwo in diesem Stadion sein.

>::1# + #1\`# :# _> #- #1 :# :# .# _# .# :# _@
MDS
quelle
0

C: 48 Zeichen, ca. (2 ^ 32 - 1) * 65090 Byte Ausgabe

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

Beachten Sie, dass der 65090 nicht genau ist und von der Stapelgröße abhängt. Das Programm stoppt schließlich, wenn es abstürzt. Ich könnte auch einfach eine immer längere Zeichenfolge in Puts () einfügen, um die Ration unendlich zu machen, aber das scheint ziemlich betrügerisch.

Stuntddude
quelle
1
Das ist eine Endlosschleife
Izabera
Autsch, du hast recht, denke ich. Ich werde sehen, ob ich herausfinden kann, wie ich das beheben kann.
Stuntddude
0

Java (131): unbekannte, aber begrenzte Menge

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

Verwenden der geringen Wahrscheinlichkeit von Math.random (), in einer Schleife auf 0 zu gelangen und dann 2 ^ 64-1-Schleifen durch eine foreach mit der Ausgabe 1234567890 zu gehen;

masterX244
quelle
0

Python 3, 115 Byte, läuft 7983 Jahre (unbekannte Anzahl von Zeichen)

EDIT: ymbirtt hat mich geschlagen ._.

Ich weiß, das ist nicht wirklich kurz und ich weiß, dass die andere Python-Antwort viel länger ist, aber ich habe beschlossen, es zu versuchen.

Das Programm läuft ungefähr 8000 Jahre, was, wie Sie wissen, eine ziemlich lange Zeit ist.

Was es tut, ist kontinuierlich die aktuelle Zeit mit der datetime.datetime.now()Funktion abzurufen und sie zu vergleichen 9999-12-31 24:59:59.999999, was meines Wissens das maximale Datum in Python ist.

Wenn ist ist gleich, stoppt das Programm. Wenn dies nicht der Fall ist, wird kontinuierlich ausgegeben a.

import datetime
while 1:
    if str(datetime.datetime.now())=="9999-12-31 24:59:59.999999":exit
    else:print("a")
m654
quelle
1
Was ist, wenn Sie diesen Moment verpassen?
C5H8NNaO4
@ C5H8NNaO4 Wenn Sie es für alle 7983 Jahre eingeschaltet lassen, werden Sie es hoffentlich nicht verpassen.
M654