Bilden Sie ein Quine.
Scheint einfach, oder? Nun, dieses Quine muss sich selbst plus sein erstes Zeichen ausgeben, das sich dann plus sein zweites Zeichen ausgibt, und so weiter.
Auf diese Weise sollte das Quine in mehreren Generationen zwei Kopien ausgeben.
Beispiel: Lässt Ihren Code sein x
. Laufen sollte es ausgeben x + x[:1]
. Ausführen des resultierenden Programms sollte ausgeben x + x[:2]
und so weiter ...
Wenn Ihr Code ausgeführt wurde foobar
, sollte dies ausgegeben werden foobarf
. Laufen sollte dies ausgeben foobarfo
. Und so weiter und so fort nach diesem Muster:
foobar
foobarf
foobarfo
foobarfoo
foobarfoob
foobarfooba
foobarfoobar
foobarfoobarf
Ihr Programm muss länger als 2 Bytes sein und darf bei jeder Iteration nur EIN zusätzliches Zeichen seines eigenen Codes ausgeben.
Antworten:
Zsh ,
110108100 BytesProbieren Sie es online!
So ist es möglich.
Erläuterung
quelle
R, 289 Bytes
Verdienst dieser Inspirationsquelle. Funktioniert nur, wenn es in derselben R-Umgebung ausgeführt wird wie das vorherige Quine.
quelle
cat
, neue Zeilen hinzuzufügen.main
oder eine andere obligatorische Struktur wie die in R. Außerdem verlangt die Frage nicht ausdrücklich ein vollständiges Programm, so dass eine Funktion oder ähnliches genügen würde.Alice , 29 Bytes
Probieren Sie es online!
Das nicht druckbare Zeichen ist 0x18.
Erläuterung
Das
"
Problem mit den üblichen Fungeoid-Quines ist, dass wenn wir den gesamten Quellcode wiederholen, wir auch zusätzliche bekommen"
und die Zeichenfolge nicht mehr den gesamten Quellcode abdeckt. Ich nehme an, deshalb wird in der vorhandenen Antwortg
stattdessen der Cheat-Y- Ansatz verwendet.Diese Antwort verwendet den
"
-basierten Ansatz, aber anstatt ein"
in die Quelle aufzunehmen, schreiben wir es zur Laufzeit in das Programm. Auf diese Weise wird es immer nur eine geben,"
unabhängig davon, wie oft das Programm wiederholt wird (da wir es unabhängig von der Programmgröße nur auf eine bestimmte Koordinate schreiben).Die allgemeine Idee ist dann, dass wir eine Darstellung des gesamten Quellcodes auf dem Stapel erstellen, aber nur die ersten 29 der Zeichen (dh die Programmlänge) durchlaufen, wobei die Länge der Schleife durch die Größe des Codes bestimmt wird. Daher können wir tatsächlich beliebige Zeichen (außer Zeilenvorschübe) anhängen,
@
und das Ergebnis ist immer eine zyklische Wiederholung des Kernprogramms, ein Zeichen länger als die Quelle.quelle
Perl 5 , 83 Bytes (einschließlich der letzten Newline)
Probieren Sie es online!
Das gute alte
__DATA__
Token macht es einfach, einen beliebigen String an ein beliebiges Perl-Programm anzuhängen, auf das das Hauptprogramm dann über das<DATA>
Datei-Handle zugreifen kann (und tatsächlich verwendet__END__
, was aus Gründen der Abwärtskompatibilität dasselbe tut, anstatt__DATA__
zwei zusätzliche Bytes zu sparen). .Beachten Sie, dass dieses Programm nicht nicht seinen eigenen Quellcode lesen, aber nur die zusätzlichen Eingabedaten an die Quelle nach dem beigefügten
__END__
Token.__END__
Tatsächlich funktioniert das Token und alles, was dahinter steht, wie ein String-Literal, das am Ende der Eingabe endet.Beachten Sie auch, dass dieses Programm in einer neuen Zeile enden muss, um die Spezifikation genau zu erfüllen. Wenn dies nicht der Fall ist, wird die neue Zeile
__END__
ohnehin automatisch nach der zweiten angefügt , aber dann entspricht die Ausgabe der ersten Iteration nicht mehr genau dem Code plus dem ersten Byte.quelle
Befunge-98 , 30 Bytes
Probieren Sie es online!
Mein Versuch, Befunge-98 zu verwenden, das ein mit Leerzeichen abgeschlossenes Quine verwendet, das auch zählt, wie viele Zeichen ausgegeben wurden. Verwendet jedoch den
g
Befehl.quelle
PHP, 146 Bytes
Es sollte über die
-r
Befehlszeile ausgeführt werden.quelle
php -r 'command'
.Runenverzauberungen , 61 Bytes
Probieren Sie es online!
Verwendet einen ähnlichen Ansatz wie die Alice-Antwort: Schreibt den Zeichenfolgenbefehl reflektierend
"
in den Code, sodass es nur eine gibt. Es bleibt noch viel Zeit, Zeichenfolgen und Stapel zu manipulieren, um das ursprüngliche Programm wiederherzustellen, wie viele zusätzliche Bytes benötigt werden, und die erforderlichen Hunks zu drucken.Die
}͍
Sequenz dreht die speicherinterne Zeichenfolgendarstellung so, dass sie803X4+kw
aufgrund der Position von am Anfang und nicht am Ende angezeigt wird,"
und es gibt keine einfachere Möglichkeit, diese Operation durchzuführen, ohne viele unangenehme Zahlen berechnen zu müssen .Während das ursprüngliche Programm 61 Bytes lang ist, ist seine String-Länge nur 50, was einfach zu konstruieren ist,
5X
und es war nur ein Zufall, dass dies nicht ausgefüllt werden musste, nachdem alle notwendigen Funktionen enthalten waren (z. B. wäre ein Programm der Länge 49 einfacher gewesen) codieren wie50
mit einem Füllbyte, als ein Literal zu codieren49
, während51
es als5X3+
oder 53 codiert würde , wobei es seine eigenen zusätzlichen Bytes berücksichtigen müsste ).quelle