Offensichtlich geht es beim Codegolf darum, das Beste aus dem wenigsten Code zu machen. Wen kümmert es wirklich, was die tatsächliche Ausgabe ist?
Während wir die Herausforderung hatten, das beste Input-Output- Verhältnis zu erzielen , ist dies eine Forderung nach einer möglichst endlichen und deterministischen Ausgabe mit vorgegebenen Codelängen. Ironischerweise ist diese Herausforderung dann nicht Code-Golf .
Regeln:
Schreiben Sie drei unabhängige Ausschnitte (nicht vollständige Programme / Funktionen).
Die Snippets müssen in derselben Sprache sein.
Score ist die Gesamtzahl der ausgegebenen Bytes.
Ausgaben können in Form eines Ergebnisses, STDOUT usw. erfolgen.
Die Schnipsel dürfen keinen Fehler verursachen.
Die Snippets können unterschiedliche Ausgabeformen verursachen.
Nachgestellte Zeilenumbrüche werden nicht gezählt.
Das erste Snippet muss 1 Byte oder die Mindestlänge sein, die mindestens 1 Byte Ausgabe erzeugt.
Das zweite Snippet muss ein Byte länger sein.
Das dritte Snippet muss zwei Byte länger sein als das erste.
Antworten:
gs2, 412 + 5,37 · 10 902 + 10 10 903,1 Bytes
f
drückt1\n2\nFizz\n4\nBuzz\n...\nFizzBuzz
als412
-Byte String.fô
druckt alle seine Permutationen, also412! * 412
Zeichen.fôô
Gibt alle Permutationen dieser 412! -Element-Liste aus, wobei jedes Element 412 Zeichen lang ist, also412 * (412!)!
Bytes.EDIT: Um die Dinge in die richtige Perspektive zu rücken, ist dies zumindest
Bytes, die alle bisherigen Antworten hier in den Schatten stellen.
quelle
Pyth, 26 + 1140850688 + (> 4,37 × 10 20201781 )
Ich habe keine Ahnung, ob es möglich ist, die genaue Länge der Ausgabe für das dritte Programm zu berechnen. Ich kann nur Grenzen setzen. Es wird etwas dazwischen drucken
4.37 × 10^20201781
und1.25 × 10^20201790
Zeichen .Dies druckt:
Der erste druckt das Alphabet, der zweite alle Untergruppen des Alphabets und der dritte die Untergruppen der Untergruppen des Alphabets, bei denen es sich um eine Liste mit Längen handelt
2^(2^26) ~= 1.09 × 10^20201781
.Offensichtlich wird kein Computer jemals in der Lage sein, diese große Liste zu berechnen und auszugeben.
quelle
CJam, 17 + 34 + 72987060245299200000 = 72987060245299200051 Bytes der Ausgabe
Zum leichteren Vergleich sind dies ca. 7,3 * 10 19 .
Drucke:
Nun, die letzte besteht aus allen Permutationen, bei
[0 1 2 ... 19]
denen die Zahlen zusammengequetscht sind. Ich würde es nicht empfehlen, es auszuprobieren ... (Versuchen Sie es, als4e!
ob Sie einen Vorgeschmack bekommen möchten .)Testen Sie es hier: Programm 1 , Programm 2 , Sane-Version von Programm 3 .
quelle
Jelly , 1,2 × 10 2568 Bytes Ausgabe
Berechnet 1000 , 1000 1000 und 1000 1000!.
Probieren Sie es online aus: erstes Programm | zweites Programm |drittes Programm (modifiziert)
ȷ
Kann zu Zwecken der Bytezählung in der aktuellen Version von Jelly als Byte 0xa0 codiert werden .Wie es funktioniert
ȷ
Kann in Jelly in Zahlenliteralen als Python'se
(wissenschaftliche Notation) verwendet werden. Zum Beispiel3ȷ4
gibt 30000 . In Jelly wissenschaftlicher Notation, die Koeffizientenstandardmäßig auf 1 und die Exponenten standardmäßig auf 3 , soȷ
,1ȷ3
und1000
alle die gleiche Anzahl zurück.quelle
⍳
?ı
istR
(range).ı
undȷ
mache etwas, das nichts mit Jelly zu tun hat. Ich werde in ein paar Minuten eine Erklärung hinzufügen.ȷRR
verursacht das?ȷRR
ist⍳¨⍳1000
. Ich wollte⍳⍳1000
. In Dyalog werden 91244⍳⍳7
Punkte, 803487⍳⍳8
Punkte und 7904816⍳⍳9
Punkte erzielt, da alle Indizes in einem 1 × 2 × 3 × 4 × ... Array aufgelistet werden. So⍳⍳1000
wäre theoretisch (WS VOLL!) Erzeugt eine Reihe von! 1000 Listen von 1000 Elementen je!Hexagonie , 1 + 3 + 6 = 10 Bytes der Ausgabe
Naja ... kein sehr beeindruckendes Ergebnis, aber ich kann zumindest behaupten, dass es optimal ist. Mit einem einzelnen Byte ist es unmöglich, etwas auszudrucken und zu beenden, also beginnen wir mit zwei Bytes:
Der entfaltete Code ist
Dies gibt ein Byte aus und wird beendet.
Für drei Byte Code können drei Byte Ausgabe gedruckt werden. Zum Beispiel:
oder entfaltet:
druckt
111
. Jeder Kleinbuchstabe vond
bisz
funktioniert und druckt seinen Zeichencode. Dies sind die einzigen 23 Möglichkeiten, 3 Byte mit 3 Byte Code zu drucken.Schließlich gibt es für vier Bytes 169 Möglichkeiten, 6 Bytes zu drucken. Da keiner von ihnen etwas Interessanteres tut (mit Ausnahme eines ungeraden Kontrollflusses) als die einfache Lösung, werde ich Folgendes vorstellen:
Entfaltet:
Du hast es erraten. Es druckt
111111
.Woher weiß ich, dass diese optimal sind? Ich habe den Brute Forcer, den ich für den Wahrheitskatalog geschrieben habe, so angepasst , dass er in 7000 Zyklen nach maximaler Endlichkeit sucht.
quelle
12345
und anhalten. . Nur um der Neugier willen, verstehen Sie.Im Ernst, 2025409 Bytes
1 Byte:
(Erzeugt 11.756 Bytes an Ausgabe)
2 Bytes:
Erzeugt 153.717 Byte Ausgabe
3 Bytes:
Erzeugt 1.859.936 Ausgabebytes
Im Ernst noch nicht mit Dingen wie "alle Teilmengen" oder "alle Kombinationen", so dass dies relativ schlecht abschneidet.
quelle
N
bringt es dazu, so viel Output zu produzieren?Python 3, 1 + 22 + 23 = 56
Ausgabe
Drucken Sie 9 und dann die Definition für
id
undabs
.quelle
Labyrinth , 1 + 2 + 4 = 7 Bytes
Eine weitere niedrige Punktzahl, die ich hauptsächlich poste, weil ich bewiesen habe, dass sie für die Sprache optimal ist.
Wie Hexagony kann Labyrinth nicht mit einem einzigen Byte drucken und enden. Wir beginnen also mit zwei Bytes:
Gibt eine Null aus und endet.
Für drei Bytes können wir die naive Lösung nicht schlagen:
Dies druckt zwei Bytes vor dem Beenden. Es gibt noch einige andere Optionen, beispielsweise das Drucken
-1
mit(!@
oder~!@
oder,!@
. Es gibt jedoch eine ziemlich coole Lösung, die die Quellcode-Rotation verwendet:Dies gibt eine Null aus und verschiebt dann die Quelle zu
@!>
. An diesem Punkt stößt es auf eine Sackgasse, dreht sich um und führt das aus!
auf dem Rückweg noch einmal aus, bevor es endet.Für vier Bytes macht es ein bisschen mehr Spaß, da der einzige Weg, um 4 Zeichen zu drucken, darin besteht, den obigen Trick zu verwenden:
Zwei Nullen
@!!>
drucken , verschieben zu , zwei weitere Nullen drucken.In all diesen Fällen ignoriere ich, dass Sie auch ein Byte mit
\
oder drucken können.
, da diese immer genau ein Byte ausgeben, während!
mindestens eines und möglicherweise mehrere ausgegeben werden.quelle
Bash, 1726 Bytes
(Ich habe es jetzt behoben. Bitte überlegen Sie, ob Sie abstimmen möchten.)
1 Byte :
"
Ausgänge:
307 Bytes:
id
Ausgänge:
1418 Bytes:
zip
(Druckt nach STDOUT)quelle
MATL , 313
Die aktuelle Version der Sprache ( 3.1.0 ) verwendet, die älter als diese Herausforderung ist.
Code (vordefiniertes Literal: Erzeugt Nummer 2, die implizit gedruckt wird):
Ausgabe (1 Byte):
Code (erzeugt die Zahl pi, die implizit mit 15 Dezimalstellen gedruckt wird):
Ausgabe (17 Bytes):
Code (Zahlen von 1 bis 99, die standardmäßig mit Leerzeichen dazwischen gedruckt werden):
Ausgabe (295 Bytes):
quelle
Verarbeitung, 39 Bytes
Deterministisch
1 Byte :
Ausgänge
0
.9 Bytes :
Ausgänge
3.1415927
29 Bytes :
Ausgänge
processing.opengl.PGraphics3D
Nicht deterministisch,> = 129 Bytes
> = 32 Bytes:
Ausgänge
processing.awt.PGraphicsJava2D@ + [mem-address]
> = 32 Bytes:
Ausgänge
processing.awt.PGraphicsJava2D@ + [mem-address]
> = 65 Bytes: (Vielen Dank an @anOKsquirrel für diesen Vorschlag.)
Ausgänge
quelle
JavaScript, 1 + 3 + 18 =
1822Keine sehr interessante Antwort, aber wahrscheinlich das beste, zu dem JavaScript fähig ist.
Dank @UndefinedFunction wurden 4 Punkte hinzugefügt !
Ausgaben als Text:
quelle
alert()
Sie eine Ausgabe vonundefined
(zumindest in Safari).alert(.1)
gibt0.1
undalert(1/9)
gibt0.1111111111111111
alert
gibt mirfunction alert() { [native code] }
Befunge, 2 + 4 + 6 = 12
Schnipsel, die kürzer als Länge 2 sind, können entweder nicht ausgegeben oder ihre Ausgabe nicht beenden.
Gibt in Befunge
.
den obersten Wert des Stapels als Ganzzahl gefolgt von einem Leerzeichen aus. Ein Leerzeichen ist kein Zeilenumbruch, daher wird es in die Zählung einbezogen. Zusätzlich ist der Stack "unendlich" mit Nullen gefüllt, so dass die Programme (bzw.) Folgendes ausgeben:quelle
..<@
druckt 8 Bytes.SmileBASIC, 1 + 4 + 10 = 15 Bytes
Programm 1:
Der kürzeste Weg, um etwas zu drucken, ist mit? (DRUCKEN) und ein einzelnes Zeichen. Dies kann entweder eine Zahl oder ein Variablenname sein, und es spielt keine Rolle, da sie alle gleich lang sind.
Programm 2:
Jetzt haben wir Zugang zu ein paar weiteren Dingen. Der längste Ausdruck, der erstellt werden kann, ist eine der Konstanten #Y, #L oder #R mit den Werten 128, 256 bzw. 512. Stattdessen verwende ich jedoch ein Komma, damit (in diesem Fall) 3 zusätzliche Leerzeichen gedruckt werden.
Programm 3:
Mit 3 Zeichen können Sie E-Notationsnummern schreiben:
quelle
HQ9 +, 71304
Druckt den 11.884-stelligen Text von "99 Flaschen Bier"
Druckt zweimal "99 Flaschen Bier"
Druckt dreimal "99 Flaschen Bier"
quelle
Japt
-Q
, Ausgänge1.0123378918474279e+150
Bytes ausDie vollständige Nummer lautet
Bytes.
# 1
Ausgänge
Für 67 Bytes. (Dank an Shaggy)
# 2
Ausgänge
Das sind 501 Bytes.
(Dank an @Shaggy)
# 3
Gibt alle Permutationen der 95 druckbaren ASCII-Zeichen im Format aus
["...","...","..."...]
, das istSie können unendlich viele Ausgabebytes erhalten, wenn Sie das
-F
Flag in Japt verwenden. Wenn der letzte Ausdruck des Programms false ergibt, wird stattdessen der im Flag angegebene Wert ausgegeben. Ich denke, die Punktzahl für Japt-F"Insert Super Long String Here"
ist unendlich.quelle
undefined
in 1 Byte:$
.K
26 Bytes Output nutzen und bekommen, aber dein 501 Byter ist einfach genialMalbolge , 1 + 2 + 3 = 6 Bytes
Probieren Sie es online aus: erstens , zweitens , drittens
Ausgänge:
Brute gezwungen. Angenommen, es
\0
handelt sich nicht um ein gültiges AusgabezeichenMit
\0
:Ausgänge:
quelle
scg , 1 + 27 + 188 = 216
Erster:
Gibt nur 1 aus, da der Stapel am Ende des Programms ausgegeben wird.
Zweite:
Gibt die Debug-Informationen aus, die folgendermaßen aussehen sollten:
Dritte:
Fügt dem Stapel 99 hinzu und verwendet dann die Bereichsfunktion. Ausgänge 01234567891011 .... (Dies ist eines der Male, bei denen ich wünschte, ich hätte die Fakultätsfunktion implementiert. Ich habe es nicht getan.)
quelle
Marbelous 1 + 1 + 2 = 4 Bytes der Ausgabe
Marbelous wird hier durch Zwei-Byte-Anweisungen behindert. Sinnlose Kommentare oder unnötige Leerzeichen sind die einzigen Möglichkeiten, eine ungerade Byteanzahl zu erhalten.
Gib "A" aus und beende:
Gib "B" aus und beende mit einem leeren EOL-Kommentar
"CD" drucken und beenden:
quelle
Mathematica, 6 + 461 + 763 = 1230
1225618163Bytes AusgabeDerzeit werden die letzten beiden verwendet
Information
, um die Dokumentation zu den Symbolen abzurufen, die viele Bytes ausgeben können. Beachten Sie, dass dies in der 10.1-Befehlszeile ausgeführt wurdeMathKernel
.quelle
Javascript, 72 Bytes
Dies funktioniert im Mozilla JSShell Javascript-Befehlszeileninterpreter.
1 Byte:
1
Ausgänge
1
35 Bytes:
gc
Ausgänge
36 Bytes:
run
Ausgänge
quelle
js
die Befehlszeile tippen , erhalten Sie eine JavaScript-Shell.-bash: js: command not found
Bitte spezifizieren Sie mehr.js
die neueste Version von Bash rausgebracht.gc
scheint in TIO Node nicht vorhanden zu sein. Suchen Sie daher nach einer Implementierung, oder entfernen Sie diese Antwort.Oktave, 2818417 Bytes
14 Bytes für
ans = 2.7183\n
14 Bytes für
ans = 3.1416\n
Zeigen Sie die gesamte Dokumentation an. 2818389 Bytes, gezählt mit
dd
Online testen ! weilevalc
es nicht funktioniert hat.quelle
SmileBASIC 4, 1 + 13 + 15 = 29 Bytes
Dies wird mit ein paar Anpassungen der SmileBASIC 3-Antwort von 12Me21 ähnlich sein.
1
Wie zuvor beträgt die kürzeste Menge an Code, um eine Ausgabe zu erzeugen, 2 Bytes:
?
(PRINT
) und ein Einzelbyte-Ausdruck. Der Konsens ist , dassPRINT
sie nicht eine neue Zeile erzeugen , wenn es in der nächsten Zeile geht, aufgrund der Art und Weise des Textbildschirm funktioniert. Das ergibt also ein Byte Ausgabe.2
Mit 3 Bytes können wir etwas anderes machen. SB4 führt
INSPECT
mit einem Alias als ein??
, der Informationen über einen einzelnen Wert ausgibt . Wenn wir zum Beispiel eine leere Zeichenfolge angeben, kann dies zu einer viel höheren Ausgabe führen als SB3. Das bringt uns 13 Bytes.3
Wir müssen mit 4 Bytes arbeiten, also müssen wir entscheiden, was wir tun sollen, um unsere Ausgabe zu maximieren. Mitmachen
??
ist eine sichere Sache; Wir haben nur 2 Bytes für unseren Ausdruck, aber die zusätzliche Ausgabe vonINSPECT
ist grundsätzlich kostenlos. Also benutze ich es, um einen Etikettenstring zu drucken. Das sind 15 Bytes.Die Summe beträgt 29 Bytes.
quelle
Microscript II, 23 + 47 + 71 = 141 Bytes
1:
C
Die Stringifizierung von Fortsetzungen ist in den Spezifikationen nicht streng definiert, aber in der Referenzimplementierung ergibt dies, wenn es alleine ausgeführt wird, einen 23-Byte-String.
<Continuation @t=\d\d\dus>
(\d
Stellt eine Ziffer dar, deren Ziffern variieren).Auf meinem Computer dauert dies in der Tat immer zwischen ungefähr 180 und ungefähr 400 Mikrosekunden.
Die erste Verwendung, die ich jemals für diese Anweisung hatte.
2:
CP
47 Bytes Ausgabe - die Ausgabe der ersten zweimal mit einem Zeilenumbruch dazwischen.
3:
CPP
Ziemliech direkt. 71 Bytes Ausgabe - die Ausgabe der ersten drei Mal mit Zeilenumbrüchen dazwischen.
quelle
PowerShell, ~ 4300 Byte
Ungefähre Ausgabelänge bei dem System, auf dem es ausgeführt wird. Alle folgenden Codefragmente sind deterministisch, da bei gleichem Ausgangszustand des Computers derselbe Text ausgegeben wird, nur dass sich die Ausgabe in der Praxis von Ausführung zu Ausführung ändern kann.
Länge 1, 107 Bytes
Dies ist ein Alias für
Where-Object
. Es wird eine Benutzereingabeaufforderung ausgegeben, in der Sie nach zusätzlichen Informationen gefragt werden:Länge 2, 113 Bytes
Dies ist ein Alias für
Remove-ItemProperty
. Es wird eine Benutzereingabeaufforderung ausgegeben, in der Sie nach zusätzlichen Informationen gefragt werden:Nur knapp länger als die Länge 1 Schnipsel.
Länge 3, ~ 4100 Bytes
Dies ist ein Alias, für
Get-Process
den eine formatierte Tabelle aller auf dem System ausgeführten Prozesse ausgegeben wird:quelle
Javascript, 312 + 318 + 624 = 1254 Bytes Ausgabe
Die beiden Funktionen
$
und$$
sind in allen gängigen Browsern Konsolen zur Verfügung, als Shortcuts fürdocument.querySelector
unddocument.querySelectorAll
jeweils. Unterschiedliche Browser haben systemeigenen Code, der zu etwas unterschiedlichen Zeichenfolgen gezwungen wird, und der IE verwendet in jeder Funktion einfaches JS, was zu einer viel längeren Darstellung führt.Für die Byteanzahl nehme ich die Länge der Zeichenfolgendarstellung der einzelnen und nicht die manchmal geänderte Konsolenanzeige, sodass die Gesamtanzahl der Bytes für die folgenden Browser gilt:
(Ich betrachte das IE-Ergebnis als die "offizielle" Zählung, weil es die längste ist.)
In Nicht-Konsolen-Browserumgebungen stammen die größten Ausgaben aus folgenden Quellen:
Ergebnislänge nach Browser:
{}
verwendbar) + 32 = 38 (oder 48) Bytes{}
verwendbar) + 38 = 44 (oder 54){}
verwendbar) + 36 = 42 (oder 52)Diese beiden Eingaben erzeugen in all diesen Browsern und Konsolen die größtmögliche Ausgabe. Um dies zu beweisen, überprüfen wir alle Alternativen:
Object.getOwnPropertyNames(window).filter(x=>x.length<=3)
und diese dannmap
an ihre String-Ausgaben anschließen, um die größeren zu ermitteln. (Beachten Sie, dass in einigen Browsern wie Firefox bestimmte spezielle Konsolenvariablen nicht auf diese Weise aufgerufen werden können, da sie keine Eigenschaft des Fensters sind.)1234567890
), optional gefolgt von einer.
oder mehreren Dezimalziffern und / oder einem Exponententeil, oder.
eine oder mehrere Dezimalziffern und optional ein Exponententeil sein. Andere Arten von Zahlen muss entweder0o
,0x
oder0b
(oder Groß Formen), gefolgt von einer oder mehreren Ziffern. Für unsere Zwecke können wir Folgendes ableiten:$
einem Komma oder einer einstelligen Zahl gefüllt sein . Arrays mit nur einem Element werden als das Element selbst zu Strings gezwungen. Leere Arrays werden zu leeren Strings.{}
allein am Anfang eines Skripts eher als Anlage behandelt, als dass ein Objekt erstellt wird.eval({})
gibt undefined zurück,eval({$})
gibt die$
Funktion zurück. Es gibt nicht genügend Zeichen , die umgeben{}
in()
.if
,in
,do
,new
,for
,try
,var
, undlet
würden alle mindestens zwei andere Zeichen erfordern die Grenze zu verwenden, zu überschreiten.~
,+
,-
,!
,++
, und--
. Die zweistelligen Operatoren können nur mit einer einzelnen Zeichenvariablen verwendet werden, von denen es nur eine ($
) gibt, die ergibtNaN
. Die anderen vier Operatoren können mit jedem ein- oder zweistelligen Wert verwendet werden. Davon gibt es:$
,$_
,$0
,$1
,$2
,$3
,$4
,$
,$$
,$x
). Wenn mit diesen Betreibern verwendet wird , werden die Ergebnisse darauf beschränkt zu sein-1
,true
,false
, undNaN
.true
,false
.-1
,0
(-0
wird0
auf toString)true
.+
,-
,*
,/
,%
,<
,>
,&
,|
,^
. Sie können nur mit einem einzelnen Zeichen pro Seite verwendet werden. Zu den Optionen für Werte gehören$
und ganze Zahlen von 0 bis 9. Zu den Ergebnissen aller Kombinationen von diesen gehörenInfinity
einige Zahlen und Binärwerte, die oben erwähnt wurden, sowie zahlreiche Brüche, die zu Zeichenfolgen von 19 Zeichen oder weniger (1/7
19 Zeichen, anders als1/9
oben vorgeschlagen, nur 18 Zeichen) gezwungen werden , und die Textdarstellung von$
vorangestelltem oder gefolgt von einer einstelligen ganzen Zahl oder sich selbst..
benötigt eine vorhandene Variable und einen Bezeichner, der sich auf eine Eigenschaft bezieht. Alle Verwendungen dieses hier führen zuundefined
. Das Umgeben eines Wertes in(
)
gibt den Wert zurück, ebenso wie das Zuweisen mit=
. Die Verwendung von()
oder `` zum Aufrufen eines Werts als Funktion führt zu undefinierten Werten oder Fehlern mit allen verfügbaren Werten.Zusammen ergeben sich bei Verwendung einer Chrome-Konsole insgesamt 1651 mögliche Ausgaben. Die längsten Ausgänge für eine, zwei und drei Buchstaben sind von
$
,$$
und$+$
sind.quelle
Gleichstrom , 2 + 5 + 18 = 25 Bytes
1:
Ff
Erträge ( Online ausprobieren! ):2:
Fdf
Erträge ( Online ausprobieren! ):3:
Fd^f
Erträge ( Online ausprobieren! )Keine davon ist besonders interessant,
dc
eignet sich aber nicht besonders zum Ausspucken von Produktionsmengen. Mir gefällt, dass jede Antwort auf der vorherigen aufbaut. Wie auch immer,F
ist nur die Nummer 15;f
druckt den gesamten Stapel;d
dupliziert den Stapelanfang;^
Erhöht den Wert für "Next-to-Top-of-Stack" (in diesem Fall 15 ^ 15). Ich glaube nicht, dass das noch übertroffen werden kanndc
.quelle
Ruby, 3 + 14 + 28 = 45 Bytes
Warum habe ich das getan?
Druckt
nil
.Druckt
#<IO:<STDOUT>>
.Druckt etwas nach dem Vorbild von
#<Object:0x0000000003610988>
.Startet eine Instanz von Interactive Ruby. Beim Beenden ist das zurückgegebene Objekt
#<IRB::Irb: @context=#<IRB::Context:0x0000000003643040>, @signal_status=:IN_EVAL, @scanner=#<RubyLex:0x00000000038900a0>>
für 121, aber da Sie drücken^D
müssen, um die irb-Instanz tatsächlich zu beenden, war ich mir nicht sicher, ob es tatsächlich als Lösung in "3 Bytes" gelten würde, also bin ich es nicht es tatsächlich in die Partitur aufnehmen, es sei denn, es wird ein OK.quelle
Perl 6, 53 (17 + 18 + 18) Bytes
e
Ausgänge-e
Ausgängee*e
Ausgängequelle
Runenverzauberungen, 4.000.000 Bytes Ausgabe
Das erste Programm ist:
Nimmt 2 Bytes, um: einen Wert auf den Stapel zu legen, einen Wert vom Stapel zu drucken und zu beenden. In diesem Fall wird gedruckt
10
(obwohl alle ganzzahligen Werte von 0 bis 16 ebenso gültig sind).Für 3 Bytes:
Druck
10000
, wiedera
1 bis einschließlich 16 sein könnte (um mehr Leistung als das ursprüngliche Programm zu generieren, 0 unter anderen Betreibern potenziell gültig ist) , und es gibt nicht eine ganze Menge von Operatoren , die einen einzelnen Eingang nehmen und erzeugen eine Ausgabe, viel weniger längere Ausgabe.XCYZ:E
sind die einzigen wirklichen Möglichkeiten.aY@
ist nur derjenige, der die meiste Ausgabe ergibt .Dies läuft laut Sprachangabe unendlich. Da der Interpreter jedoch ein integriertes "ok, das ist genug" -Höchstausführungslimit hat, ist dies die höchste Ausgabe, die mit 4 Zeichen erreicht werden kann (und TIO unterbricht die Ausführung nach ~ 130.000 Bytes für mehr als 128 KB), und da der Interpreter die Sprache definiert , ist dies funktioniert. Und obwohl ich diese Schwelle schon einmal angehoben habe (von 10.000 Schritten auf 1 Million), habe ich nicht vor, bald damit herumzuspielen.
Größer?
Wenn ich mich auf die drei Annahmen berufe, die ich hier gemacht habe , dann sicher.
Welches klappt
Ack(65,Ack(65,64))
, das sind anfangs keine besonders großen Werte, um in die Ackerman-Funktion einzusteigen - sicherlich kleiner als die 255 in dem älteren Beitrag -, aber es ist in Ordnung, wir können Ack zweimal in 4 Befehlen aufrufen.Und nur Gott weiß, was es drucken wird.
Anmerkung: Die
A
Anweisung wurde seitdem zurMath
Metaanweisung, die 3 Objekte auf dem Stapel belegt: ein Zeichen für die auszuführende Anweisung und dann zwei Eingaben, x und y. Als solches dieses Programm nicht tut eigentlich nichts, sowohl weil wederA
noch@
auf eine mathematische Funktion Karte und weil zwei nachfolgende Anrufe Ergebnisse in einem Stapel Unterlauf.quelle