Ein Metaquine ist ein Programm, das kein Quine ist, dessen Ausgabe, wenn es als Programm in derselben Sprache ausgeführt wird, ein Quine ist.
Das Ziel dieser Herausforderung ist es, eine Metaquine zu schreiben. Dies ist Code-Golf , also gewinnt der kürzeste Code, wobei die früheste Antwort als Tiebreaker verwendet wird. Beachten Sie, dass aufgrund der Definition eines Quines nur vollständige Programme zulässig sind.
Regeln für Quines
Es werden nur echte Quines akzeptiert. Das heißt, Sie müssen den gesamten Quellcode wörtlich in STDOUT ausgeben, ohne :
- Lesen Sie Ihren Quellcode direkt oder indirekt.
- Verlassen Sie sich auf eine REPL-Umgebung, die einfach jeden Ausdruck, den Sie eingeben, auswertet und druckt.
- Verlassen Sie sich auf Sprachfunktionen, die in bestimmten Fällen nur die Quelle ausdrucken.
- Verwenden von Fehlermeldungen oder STDERR, um den Quine ganz oder teilweise zu schreiben. (Sie können Dinge in STDERR schreiben oder Warnungen / nicht schwerwiegende Fehler erzeugen, solange STDOUT eine gültige Quine ist und die Fehlermeldungen nicht Teil davon sind.)
- Der Quellcode besteht ausschließlich aus Literalen (unabhängig davon, ob es sich um String-Literale, numerische Literale usw. handelt) und / oder NOPs.
Nicht unterdrückbare Ausgaben (z. B. Copyright-Vermerke, Meldungen zum Starten / Herunterfahren oder ein Zeilenvorschub am Ende) können in der Ausgabe ignoriert werden, um die Gültigkeit des Quines zu gewährleisten.
Beispiel
Wenn man die Regel ignoriert, die nur literale Programme und das eingebaute Quining verbietet, wäre dies eine Metaquine in Seriously:
"Q"
Das Programm besteht aus dem Einzelzeichenfolgenliteral "Q"
, das implizit bei der Ausgabe ausgegeben wird. Wenn output ( Q
) ausgeführt wird, handelt es sich um eine Quine-Funktion ( Q
die integrierte Quine-Funktion).
T
ist eine einfache 1-Byte-Pyth-Antwort.Antworten:
CJam, 6 Bytes
Druckt
Das ist die kürzeste richtige Quine in CJam.
Teste es hier.
Erläuterung
Beide Programme funktionieren genau gleich, da der Zeilenvorschub innerhalb des richtigen Quines ein No-Op ist und nur enthalten ist, weil es teurer ist, ihn aus der Ausgabe zu entfernen. Wie die Programme funktionieren:
Randnotiz
Das gleiche funktioniert in GolfScript wie
welche druckt
mit einem Trailing Linefeed, der wiederum zu den kürzesten bekannten Quines zählt.
quelle
Pyth,
1211109 BytesDank @ Pietu1998 ein weiteres Byte abgeschlagen.
Dies wird gedruckt
Das ist eine Quine in Pyth. Sie können es hier ausprobieren .
quelle
jN B".[9N
oder auf 9 reduzieren.[9N"jN B
. (jN B"jN B
"
Spaltung , 6 Bytes
Druckt
Welches ist die kürzeste Fission quine . Dies funktioniert, weil zyklische Verschiebungen des Programms seine Ausgabe völlig unberührt lassen.
Probieren Sie es online!
quelle
Javascript ES6, 21 Bytes
Trivial.
quelle
Python 2, 29 Bytes
Es stellt sich heraus, dass die bekannte kurze Python-Quine leicht in eine Metaquin verwandelt werden kann :)
Und da wir uns nicht darum kümmern müssen, die abschließende Newline zu finden, ist die Metaquine tatsächlich kürzer!
quelle
Japt,
1513 BytesTesten Sie es online!
Dieses Programm gibt aus
Das ist die kürzeste bekannte Quine in Japt.
Wie es funktioniert
Nicht konkurrierende Version, 11 Bytes
Ich habe gerade
é
einen "Drehen" -Befehl hinzugefügt . Soist jetzt eine gültige Quine.
quelle
Rubin,
2523Erzeugt die klassische Ruby HEREdoc-Quine
Alte Lösung
Erzeugt sich selbst, außer wenn die einfachen Anführungszeichen durch doppelte Anführungszeichen ersetzt werden.
quelle
JavaScript, 50 Bytes
Basierend auf der kürzesten nicht quelllesbaren JS-Quine, die dem Menschen bekannt ist , aber gut 8 Bytes kürzer. Druckt
das ist eine quine.
quelle
Fisch (> <>), 17 Bytes
Dies funktioniert mit dem klassischen Fischquine
"r00g!;oooooooo|
, fügt aber ein hinzu,{
das den gesamten Stapel nach links verschiebt, sodass das ursprüngliche Programm kein Quine ist, sondern dessen Ausgabe beim Ausführen ist.Ausgänge:
Welches ist ein Fisch quine!
quelle
Gelee , 3 Bytes (nicht konkurrierend)
Leider sind die benötigten Atome ca. 2 Wochen jünger als die Herausforderung.
Metaquin
Probieren Sie es online!
Wie es funktioniert
Quine
Probieren Sie es online!
Wie es funktioniert
Da die zweite
Ṙ
die ersten beiden Zeichen (”Ṙ
) ausgibt, ist dies nach unserer Definition eine korrekte Quine.quelle
Octopen-Baru, 22 Bytes
** Nicht konkurrierende Antwort
Ruby-Ausgabe
Welche Ausgänge
見
. Welches ist eine Quine in Octopen-Baru!quelle
7 , 2 Bytes, Sprachnachstellung
Das Programm ist zwei Bytes lang und kann auf verschiedene Arten interpretiert werden. als hex dump:
als Codepage 437:
oder, am lesbarsten, in oktal (die 7 nativ verwendet):
Probieren Sie es online!
Die Funktionsweise ist sehr einfach: Es handelt sich um die Standard- 7-Quine mit einem No-Op-Stack-Element, das zwischen den beiden Hälften eingefügt wird, um sich zu unterscheiden (in diesem Zusammenhang
7
werden Stack-Elemente getrennt). (Ich hätte es auch am Anfang einfügen können,723723
. Ich hätte es am Ende nicht interpretieren können, weil abschließende 7s wie abschließende Whitespaces sind und in der gepackten Codierung ignoriert werden, daher würde es sich nicht vom Ausgabeprogramm unterscheiden. )Übrigens ist dieses Programm ein hexadezimales Palindrom , aber das ist meistens nur Zufall.
quelle
Unterlast, 11 Bytes
Ziemlich einfach. Es wird gedruckt
(:aSS):aSS
, was die Standard-Unterlast-Quine ist.quelle
Brachylog , 12 Bytes
Probieren Sie es online!
Eine von 132 gleichlangen Metaquine-Variationen der Quine, die ich aus Fatalize's Brachylog v1 (non-cheating) Quine übersetzt habe. Ich habe tatsächlich ein (nicht golfenes und insgesamt albernes) Programm geschrieben, um sie alle auszudrucken:
Probieren Sie es online!
Es gibt zwei Teile des ursprünglichen Quine , die unlogisch ersetzt werden könnte:
;?
geändert werden kanngj
oderjḍ
, und₁
geändert werden kann₃
,₅
oder₇
. Wenn Sie sie außerhalb des String-Literal auf eine Weise und innerhalb des String-Literal auf eine andere Weise beibehalten oder ändern, stimmt die Ausgabe nicht mit der Quelle überein, da alle innerhalb des String-Literal vorhandenen Varianten sowohl innerhalb als auch außerhalb gedruckt werden , was zu einem Quine führt, der nicht der erste Programmlauf war.;?
,gj
Undjḍ
untereinander austauschbar sind , weil alle drei Paare der Stringliteral mit sich: Durch den Aufbau des Programms, die Eingangsgröße?
mit der Schnur vereinigt wird, so dass;?
Paare der String mit sich selbst;gj
Wrappt die Zeichenfolge unabhängig vom Layout in eine Liste, die dann mit sich selbst verknüpft wird. Gleichfallsjḍ
verkettet die Zeichenfolge selbst dann ist es in zwei Hälften teilt.Die ungeradzahligen
w
Indizes sind austauschbar, da das Indexinventar für , obwohl es ursprünglichw
nur 0 oder 1 annehmen konnte , wenn 0 die Eingabe inw
das erste und 1 das mit dem zweiten formatierte Elementw
druckt, zu etwas gewachsen ist, das extern als Bitfeld fungiert: Das untere Bit des Indexes kodiert, ob es direkt oder formatiert ist, das mittlere Bit kodiert, ob die Ausgabevariable vonw
ist nicht eingeschränkt oder auf den Eingang eingestellt, und das hohe Bit codiert, ob der Druck sofort ausgeführt wird oder ob er bis zum Ende des Programms verzögert wird, damit ein Zurückverfolgen möglich ist. (Diese Indizes waren mein erster und bislang größter Beitrag zu Brachylog.) Da Quine und Metaquine die Ausgabevariable nicht verwenden und nicht zurückverfolgen, sind alle vier ungeraden Indizes gleich.quelle
Befunge-93, 22 Bytes
Ich habe einfach das Standard-Quine genommen, in Anführungszeichen gesetzt, es umgekehrt (damit es korrekt in den Stapel geladen wird) und am Ende einen Stapelabdruck hinzugefügt.
Es sind 8 Zeichen, die zum normalen Quine hinzugefügt werden. Es ist also sehr wahrscheinlich, dass es eine bessere Lösung gibt.
quelle
Turtlèd , 52 Bytes (nicht konkurrierend )
1 weniger als ursprüngliches quine
Funktioniert auf die gleiche Weise, außer dass es am Ende kein Zeichen gibt. Wenn es ausgeführt wird, hat es am Ende ein Zeichen, das die Ausgabe nicht beeinflusst, da es # auf ein # schreibt. Beachten Sie, dass die Ausgabe ein wenig anders ist als die Ausgabe, die ich für die Quine-Herausforderung erstellt habe, aber dasselbe funktioniert: "schreibt #, das ist das letzte eigene Zeichen, wie die Quine, die ich erstellt habe. Lesen Sie die Erklärung dort .
quelle
Lua, 45 Bytes
Quine Code nicht meins.
wird darin enden, dass
das ist eine quine. Gut , dass das
;
ist optional in Lua.quelle
Aufdringlich , 7 Bytes
Nicht konkurrierend, da die Sprache die Herausforderung datiert.
Dies ist die Standard-Quine, wobei jedoch die Zeilenumbrüche entfernt wurden. Zeilenumbrüche bedeuten in Pushy nichts, sondern sind das Standardtrennzeichen des Druckers und werden daher für ein echtes Quine benötigt.
Probieren Sie es online! Dies gibt aus:
Welches ist das kürzeste Pushy Quine - eine Erklärung, wie es funktioniert, finden Sie hier .
Alternativ
H5-34_"
funktioniert für die gleiche Byteanzahl.quelle
Schaum , 14 Bytes
Dies druckt das zweite Schaumquin, das hier zu finden ist . Dies ist tatsächlich kürzer, da
.
immer ein Leerzeichen zwischen die einzelnen Elemente eingefügt wird, aber der Balken im dritten Token ermöglicht es mir, das Leerzeichen davor wegzulassen.quelle
Schale , 6 Bytes
Probieren Sie es online!
Druckt das Standardschalenquin
S+s"S+s"
.Das Quine erklärte:
quelle