Schreiben Sie ein Programm (oder eine Funktion) (nennen wir es P1), das beim Ausführen ein anderes Programm P2 mit derselben Sprache ausgibt und genau 1 Byte länger als P1 ist.
Programm P2 sollte beim Ausführen ein drittes Programm P3 ausgeben, das 1 Byte länger als P2 ist. P3 muss ein Programm P4 ausgeben, das ein Byte länger ist als P3 usw. Dasselbe gilt für P5, P6, ..., P∞.
Die Programmkette sollte auf unbestimmte Zeit oder an einen Ort verlaufen, an dem der Interpreter nicht mehr damit umgehen kann (aber als theoretisch gültiges Programm in der Sprache bleiben muss).
Regeln
- Standardlücken verboten
- Alle Programme in der Kette sollten in einer Sprache sein
- Es wird keine Eingabe gemacht. Ausgang geht auf Standardausgang oder Funktionsrückgabewert
- Das Programm muss nach einer gewissen Zeit beendet sein. Ein Programm, das die Ausgabe nach einem bestimmten Zeitpunkt abbricht, aber niemals beendet wird, ist nicht qualifiziert
Das kürzeste Programm P1 in Bytes in jeder Sprache gewinnt!
"puts <<2*2,2\nputs <<2*2,2\n\n2"
wächst um 2 bei jeder Iteration in Ruby. Ich könnte nichts besseres finden. : - /. Interessante Herausforderung!Antworten:
JavaScript (ES6),
14 -12 Byte-2 Bytes dank @Shaggy
Testschnipsel
Code-Snippet anzeigen
quelle
"f=_"
stellt_
dem Parameternamen ein Extra voran , wodurch die Länge bei jeder Iteration zunimmt.7 , 4 Bytes ASCII
Probieren Sie es online!
Ich weiß, dass 7 normalerweise nicht in ASCII codiert ist, aber diesmal ist es eine bequemere Codierung, sodass wir bei jedem Lauf 1 Byte hinzufügen, nicht 3 Bits.
Ich bin mir auch nicht sicher, ob dies als Betrug gilt oder nicht. (Es ist normalerweise unklar, ob eine 7-Quine betrügt oder nicht, da sie auf verschiedene Weise die Grenze überspannt.) Sie können ein anständiges Argument dafür vorbringen, dass die Zeichen
0
codiert6
, aber im Allgemeinen ist unklar, woher die resultierenden Zeichen kommen "in 7, weil es so viele, ziemlich bizarre, implizite Verhaltensweisen hat.Dieses Programm druckt sich selbst mit
1
angehängten Zeichen und wird dies auch dann tun, wenn Sie eine Reihe von1
s daran anhängen . Hier ist ein kommentierter Debug-Trace von160311
:(Es sind keine
|
mehr im Programm, dahere
wird das Programm sofort als Nebeneffekt beendet, was bedeutet, dass das Finale7
niemals ausgeführt wird.)Die grundlegende Verwirrung darüber, woher alle Zeichen kommen, besteht darin, dass die meisten Befehle in 7 beim Ausführen nur Daten erzeugen und dann
6
versuchen, eine Folge von Befehlen zu rekonstruieren, die das gegebene Datenfragment erzeugen würden. Dies endet oft in der Nähe des Originals, ist jedoch nicht mit diesem identisch. (Zu Quining-Zwecken schreiben Sie normalerweise ein 7-Programm so, dass das Ergebnis fast gleich ist und sich normalerweise in führenden oder nachfolgenden Werten unterscheidet7
.) So wird beispielsweise das1
in den Daten716
, was der einfachste Weg zum Anhängen ist1
auf den aktuellen Datenstring. Wir haben es ursprünglich mit16
einer anderen (aber ähnlichen) Zeichenfolge produziert und dabei eines der Zeichen destruktiv entfernt|
Marker, mit denen die Daten begonnen haben. (Ich denke, das beste Argument dafür, dass dies keine reine Quine ist, ist, dass sich die Ausgabe von der Eingabe unterscheidet!)quelle
Haskell ,
7466 BytesBEARBEITEN:
<>
, dann -6 durch Verschieben der(10*)<$>
.Dies verwendet jetzt den neuen freien
<>
Operator (Semigroup
Multiplikation, erfordert GHC 8.4, um ohne Import zu arbeiten.)Probieren Sie es online! (Cheats mit einem Import, da TIO GHC 8.4 noch nicht hat.)
Wie es funktioniert
main=putStr$
ist ein Boilerplate, um den folgenden String-Wert auszugeben.fst<>show
ist eine Funktion, die ein Tupel annimmt und eine Zeichenfolge zurückgibt, die aus dem ersten Element des Tupels besteht, das mit der Zeichenfolgendarstellung des Tupels verkettet ist. Dh(10*)<$>
multipliziert das letzte Element des folgenden Tupels mit 10 und fügt0
seiner Zeichenfolgendarstellung eine Ziffer hinzu .quelle
(<>)
(10*)<$>
.C (GCC) ,
134132 BytesLeichte Überarbeitung der kanonischen C-Quine. Fürchterlich lang.
Probieren Sie es online!
quelle
Spaltung 2 , 7 Bytes
Probieren Sie es online!
Das Standard-Fission-Quine , aber mit einem Extra
!
, das bei jeder Iteration ein zusätzliches 0x01 am Anfang des Codes ausgibt.quelle
Pari / GP , 35 Bytes
Probieren Sie es online!
quelle
Python 2 , 38 Bytes
Probieren Sie es online!
quelle
Brainfuck , 420 Bytes
Probieren Sie es online!
Dies ist eine Modifikation der "normalen" BrainFuck-Quine , bei der
.
am Ende bei.
jeder Iteration eine zusätzliche Note hinzukommt .Das Quine selbst codiert Brainfuck-Zeichen als Stapel von Hexadezimalziffern: Insbesondere die Hexadezimalziffern von
c-0x2b
, die günstigerweise die folgenden sind:Die Codierung deckt zwei Codefragmente ab:
>++[[>>+[>]++>++[<]<-]>+[>]<+<+++[<]<+]>>->[>]++++>++
Verschiebt die Codierung der Codierung selbst,[[<++++++++++++++++>-]<+++++++++.<]
wandert über den Stapel und druckt alles.quelle
Schmutzig , 9 Bytes
Probieren Sie es online!
Wenn das Lesen von Quellcode erlaubt ist:
Schmutzig , 8 Bytes
Probieren Sie es online!
Erklärt:
Könnte gültig sein:
Schmutzig , 4 Bytes
Probieren Sie es online!
Es druckt den Quellcode mit einer nachgestellten Newline.
(Und eine Reihe von Leerzeichen, aufgrund eines Fehlers. Ohne sie funktioniert es jedoch genauso.)
Beachten Sie, dass es nur im nativen Zeichensatz funktioniert und nicht, wenn Sie das UTF8-Front-End verwenden. Um es also mit TIO zu testen, müssen Sie das Zeichen ersetzen, das es zwischen den
[]
s ausgibt.‼
Dies ist das UTF8-Äquivalent für das, was es druckt .quelle
Java 8,
162146 BytesProbieren Sie es online aus.
Probieren Sie das erste Ausgabeprogramm aus . Probieren Sie das zweite Ausgabeprogramm aus . Versuchen Sie das dritte Ausgabeprogramm .
Erläuterung:
quine -Teil:
String s
enthält den unformatierten Quellcode.%s
wird verwendet, um diesen String in sich selbst mit dem einzugebens.format(...)
.%c
,%1$c
Und die34
werden verwendet , um die doppelten Anführungszeichen zu formatieren.s.format(s,34,s)
setzt alles zusammenHerausforderungsteil:
+1
Fügt dem unformatierten und dem formatierten Programm eine 1 hinzu..replaceAll("1+$","");}
: Da wir die Anzahl der Programmbytes nur um eins anstatt um zwei erhöhen möchten, entfernen wir alle nachfolgenden Einsen, bevor wir zurückkehren.quelle
> <> 9 Bytes
Probieren Sie es online!
Variation über ein klassisches> <> Quine, das einfach einen weiteren Dupe-Befehl hinzufügt, um das
#
in der Front zu kopieren .quelle
Perl 5 , 32 Bytes
Probieren Sie es online!
quelle
GolfScript , 9 Bytes
Probieren Sie es online!
CJam , 9 Bytes
Probieren Sie es online!
Ich schreibe diese beiden Lösungen in der gleichen Antwort, da sie nur geringfügige Variationen voneinander sind und auf genau die gleiche Weise funktionieren. Sie basieren beide auf dem gängigen GolfScript-Quine
{'.~'}.~
(oder{"_~"}_~
in CJam), das zB in meiner vorherigen Antwort ausführlicher beschrieben wird .Der einzige Unterschied besteht darin, dass diese Variante ein
1
Byte an das Ende ihrer Ausgabe anfügt . Jeder String von1
s (oder ein anderes Integer-Literal ohne führende Nullen) ist in GolfScript und CJam selbst ein trivialer Quine, sodass alle bereits am Ende des obigen Codes vorhandenen einfach wörtlich in die Ausgabe kopiert werden. Da GolfScript (und CJam) Ganzzahlen beliebiger Länge verwenden, funktioniert dies für beliebig lange Programme, zumindest solange der Computer, auf dem der Code ausgeführt wird, über genügend Speicher verfügt, um ihn zu speichern.quelle
Attache ,
767261 BytesProbieren Sie es online!
Standard-Quine, die
x
nach jeder Iteration ein Leerzeichen am Ende von hinzufügt .Erste Iterationen:
usw.
Attache, 72 Bytes
Probieren Sie es online!
Dies ist einfach eine Variation des Standardformats quine mit einer Variablen
y
, die10*y
nach jeder Iteration festgelegt wirdDie ersten paar Iterationen:
usw.
quelle
Swift 4 , 89 Bytes
Beinhaltet eine nachgestellte Newline
Probieren Sie es online!
quelle
Haskell , 88 Bytes
Probieren Sie es online! Wächst, indem der Datenzeichenfolge vorangestellt wird
#
.quelle
show
Sie mehr als nur eine Zeichenfolge eingeben und den Mustervergleich verwenden. Probieren Sie es online!Stax ,
20 bis18 BytesFühren Sie es aus und debuggen Sie es
Erzeugt bei jeder Iteration ein zusätzliches Leerzeichen vor dem zweiten Anführungszeichen.
Erläuterung
Verwendet das Programm
"34s+cTZL "34s+cTZL
, um zu erklären.quelle
JSTX , 4 Byte
Probieren Sie es online!
quelle
Runenverzauberungen , 6 Bytes
Probieren Sie es online!
Direkte Kopie dieser Antwort auf eine verwandte Herausforderung. Es ist einfach so geschehen, dass es bei jeder Iteration um 1 Byte gewachsen ist (ein starkes Argument für diese Herausforderung ist ein Duplikat von diesem oder umgekehrt).
quelle
Jelly , 11 Bytes
Probieren Sie es online!
quelle
Wunder , 33 Bytes
Eine interessante Variante des normalen Quines, bei der nach jeder Iteration eine 1 angehängt wird.
Progression:
Erläuterung
Einer der interessanten Teile dieses Quines ist, dass Wonder mit einer willkürlichen Genauigkeit arbeiten kann, so dass die Progression nach einer bestimmten Anzahl von Einsen nicht abbricht.
quelle
ColdFusion, 277 Byte
Dies ist eine triviale Modifikation meiner ColdFusion-Quine, die bei jedem weiteren Aufruf eine neue Zeile hinzufügt.
Lokal getestet auf lucee-express-5.2.6.60
quelle
Windows Batch,
3836 BytesDieser Code erstellt eine Datei mit dem Namen "q", die den Buchstaben "q" enthält, und hängt sie dann an die Originaldatei an. Beachten Sie, dass "::" ein Alias für "rem" ist, für das kein zusätzlicher Speicherplatz erforderlich ist.
2 Bytes dank user3493001 gespart.
quelle
Gol> <> , 7 Bytes
Probieren Sie es online! Probieren Sie es online! Probieren Sie es online !!!
Dies ist eine einfache Variante des regulären Gol> <> Quine , fügt jedoch bei
H
jeder Ausführung eine Kopie hinzu . Da derH
Befehl das Programm anhält,H
ändert sich durch zusätzliches Beenden das Verhalten nicht.quelle
T-SQL , 175 Byte
Zuerst habe ich eine SQL-Quine geschrieben, dann habe ich sie modifiziert, um ein zusätzliches Leerzeichen hinzuzufügen (etwas inspiriert von dieser Antwort ).
quelle
Befunge-98 (PyFunge) ,
22 bis19 BytesProbieren Sie es online!
Fügt jede Generation ein <vor dem letzten "hinzu.
quelle
C # (Visual C # Interactive Compiler) , 89 Byte
Inspiriert von Kevin Cruijssens Antwort.
Probieren Sie es online!
quelle