In dieser Herausforderung schreiben Sie ein Programm, das ein Programm ausgibt, das doppelt so lang ist wie das ursprüngliche Programm. Das ausgegebene Programm sollte eine Ausgabe ein neues Programm ein Programm verdoppelt seine Länge.
Beispiele
Wenn mein Programm ist a
:
< a
> aa
< aa
> aaaa
< aaaa
> aaaaaaaa
Regeln
- Keine quine Einbauten
- Das ursprüngliche Programm muss mindestens ein Byte umfassen
- Die Sequenz sollte theoretisch unendlich funktionieren
- Ihr Programm darf von nichts lesen (Datei, stdio)
Ihre Punktzahl entspricht der Größe des ursprünglichen Programms.
code-golf
sequence
quine
code-generation
Downgoat
quelle
quelle
Antworten:
CJam, 10 Bytes
Teste es hier.
Erläuterung
quelle
JavaScript,
626137 BytesDanke an @ Doᴡɴɢᴏᴀᴛ für die Hilfe!
Original [37 Bytes]:
Kind [74 Bytes]:
Enkelkind [148 Bytes]:
Alternative (mit Drucken auf der Konsole und als vollständiges Programm):
Original [61 Bytes]:
Kind [122 Bytes]:
Enkelkind [244 Bytes]:
Wie es funktioniert!
1.
f=_=>
Definieren Sie die Funktion f alsconsole.log(...)
2.
;f()
Führen Sie die Funktion f aus.3. (in Funktion f)
console.log(...)
Drucken Sie Folgendes aus:f=
wörtlicher Text "f ="${'_'.repeat((0+f).length+5)
"_" wiederholt für die Länge von f, geändert, um Zeichen zu berücksichtigen, die nicht in der Stringifizierung von f enthalten sind+f}
Die Stringifizierung der Funktion f;f()
wörtlicher Text "; f ()"Anmerkungen
console.log
ist notwendig anstattalert
weilalert
es nicht gut zu spielen scheint mit sehr langen Saiten (zumindest auf meiner Maschine / Browser Konfiguration)_
's werden in den Namen des (nicht verwendeten) Parameters der Funktion f eingefügt, um sicherzustellen, dass sie in die Stringifizierung von f einbezogen werden.console.log
) der ersten Lösung gegenüber der zweiten: Wenn Sie10
die Funktion erweitern, anstatt0
sie in einen String umzuwandeln, wird sie um ein Byte länger, sodass Sie die Länge nicht um 1 erhöhen und ein Byte sparen müssen.quelle
0+f
sollte auch funktionieren, um die Funktion in einen String(f=_=>`(f=${'_'.repeat((0+f).length+5)+f})()`)()
Minkolang 0.15 ,
1914 BytesOriginal , Kind , Enkel .
Erläuterung
Was das Bit zwischen
r
s bewirkt, ist, die Endperiode genügend oft zu duplizieren, um das Verdopplungskriterium zu erfüllen..
ist das "Stop-Programm" -Zeichen, sodass die vielen Punkte am Ende nichts anderes tun, als da zu sein.quelle
CJam, 12 Bytes
Beim Ausführen wird dies gedruckt
die wiederum wird gedruckt
und so weiter.
Probieren Sie es online!
quelle
Python 3, 51 Bytes
Dies schließt eine abschließende Newline ein.
Welche Ausgänge:
quelle
GolfScript, 11 Bytes
Probieren Sie es online!
Wie der Quellcode funktioniert
Wenn der obige Quellcode einmal ausgeführt wird, endet der Stack als
Dabei entspricht die leere Zeichenfolge am Anfang dem Anfangszustand des Stapels (leere Eingabe).
Zwei Kopien des Quellcodes würden einen endgültigen Zustand von
und so weiter.
Was passiert als nächstes
Nach dem Ausführen des Quellcodes führt der Interpreter Folgendes aus:
Es umschließt den gesamten Stapel in einem Array und verschiebt dieses Array auf den Stapel.
Für eine einzelne Kopie des Quellcodes enthält der Stapel jetzt
Es wurde
puts
mit der Absicht ausgeführt, den verpackten Stapel zu drucken, gefolgt von einem Zeilenvorschub.puts
ist wie folgt definiert{print n print}
.print
druckt die eingepackte Kopie des Stapels, ohne ihn zu untersuchen (dh ohne ihn in seine Zeichenfolgendarstellung zu konvertieren). Das schicktzu STDOUT und fügt die Stapelkopie oben im Stapel ein.
Der Stapel enthält jetzt
führt den zuvor definierten Codeblock aus.
:
Beginnt mit dem Speichern["" {: ".~"]} ".~"]
des Leerzeichens, verschiebt sich dann".~"
selbst und]
umschließt den Stapel in einem Array.n
Drückt eine Zeichenkette, die aus einem einzelnen Zeilenvorschub besteht.Der Stapel enthält jetzt
wird noch einmal ausgeführt. Es wurde jedoch beim ersten Aufruf neu definiert und enthält nun ein Array, keinen Codeblock.
Tatsächlich drückt es
["" {: ".~"]} ".~"]
und lässt den Stapel unverändertZum Schluss wird
print
das oberste Stapelelement gedruckt, ohne es zu untersuchen, und gesendetzu STDOUT.
quelle
𝔼𝕊𝕄𝕚𝕟, 26 Zeichen / 36 Bytes
Try it here (Firefox only).
Beachten Sie, dass eine nachgestellte Zeile vorhanden ist.
Erläuterung
Standard Quine:
⟮ⒸⅩ222+ᶈ0
Änderungen:
ô
Funktion, um alle Ergebnisse anstelle des letzten Ergebnisses auszugeben (wie bei der impliziten Ausgabe).\u27ee⦃ᶈ0}\u27ef\n
und schließen Sie den Kopierblock, um Konflikte mit späteren Kopierblöcken zu vermeiden.ď2
diese Taste, um die Saite zweimal zu wiederholen.quelle