Schreiben Sie eine Metaquine


19

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 , 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 ( Qdie integrierte Quine-Funktion).


2
Gilt die Regel Literale / Kommentare / NOPs auch für die Ausgabe (dh die reale Quine) des Metaquotes? Ansonsten ex. Tist eine einfache 1-Byte-Pyth-Antwort.
Türknauf

@Doorknob Ja, ich werde klären.
Mego

8
Ich verstehe nicht wirklich, wo der schwierige Punkt dieser Herausforderung liegt. Ist die Strategie "Drucken Sie die Zeichenfolge, die die kürzeste bekannte Quine enthält" nicht so gut wie garantiert, dass sie für jede Sprache gewinnt?
Fatalize

1
@Fatalize Nun, ich denke, die interessante Frage ist, ob dies in der gleichen Menge oder in weniger Bytes als die Quine selbst möglich ist.
Martin Ender

3
@Fatalize Ist es nicht auch möglich, dass Sie eine kurze Metaquine schreiben, die eine lange, aber gültige Quine ausgibt?
Rhyzomatic

Antworten:


15

CJam, 6 Bytes

"_p"_p

Druckt

"_p"
_p

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:

"_p"  e# Push this string.
_     e# Duplicate it.
p     e# Print a string representation of the top of the stack (i.e. the string with
      e# quotes) followed by a linefeed.
      e# The other copy is then printed automatically at the end of the program, without
      e# stringifying it.

Randnotiz

Das gleiche funktioniert in GolfScript wie

".p".p

welche druckt

".p"
.p

mit einem Trailing Linefeed, der wiederum zu den kürzesten bekannten Quines zählt.


10

Pyth, 12 11 10 9 Bytes

Dank @ Pietu1998 ein weiteres Byte abgeschlagen.

jN B".[9N

Dies wird gedruckt

.[9N".[9N

Das ist eine Quine in Pyth. Sie können es hier ausprobieren .


Ist die Ausgabe ein neuer Rekord für die kürzeste Pyth-Quine? Ich glaube nicht, dass ich es jemals zuvor gesehen habe.
ETHproductions

Ich konnte es nirgendwo anders finden. Ich habe es mir ausgedacht und versucht, eine Metaquine zu bekommen.
Rhyzomatic

1
Vielleicht solltest du es als Antwort auf die ursprüngliche Quine-Herausforderung
posten

2
Sie können dies mit jN B".[9Noder auf 9 reduzieren .[9N"jN B. ( jN B"jN B"
Ist ein

@ Pietu1998 Danke! Ich wusste, dass es einen Weg geben muss, es auf 9 zu bringen. Gibt es Quines in Pyth, die kürzer als 9 Bytes sind?
Rhyzomatic



4

Python 2, 29 Bytes

_="_=%r;print _%%_";print _%_

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!


Schlagen Sie mich noch einmal :( Ich dachte an eine Verpackung, aber Ihre ist besser
Erik the Outgolfer

3

Japt, 15 13 Bytes

Q+"+Q ³s7J" ²

Testen Sie es online!

Dieses Programm gibt aus

"+Q ³s7J"+Q ³s7J

Das ist die kürzeste bekannte Quine in Japt.

Wie es funktioniert

Q+"..." // Take a quotation mark plus this string.  "+Q ³s7J
²       // Repeat it twice.                         "+Q ³s7J"+Q ³s7J
        // Implicit output

Nicht konkurrierende Version, 11 Bytes

Q+"+Q ²é" ²

Ich habe gerade é einen "Drehen" -Befehl hinzugefügt . So

"+Q ²é"+Q ²é

ist jetzt eine gültige Quine.


1

Rubin, 25 23

puts"puts <<2*2,2
"*2,2

Erzeugt die klassische Ruby HEREdoc-Quine

puts <<2*2,2
puts <<2*2,2
2

Alte Lösung

_='_=%p;$><<_%%_';$><<_%_

Erzeugt sich selbst, außer wenn die einfachen Anführungszeichen durch doppelte Anführungszeichen ersetzt werden.



1

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.

"{r00g!;oooooooo|

Ausgänge:

"r00g!;oooooooo|

Welches ist ein Fisch quine!


1

Gelee , 3 Bytes (nicht konkurrierend)

Leider sind die benötigten Atome ca. 2 Wochen jünger als die Herausforderung.

Metaquin

”Ṙv

Probieren Sie es online!

Wie es funktioniert

”Ṙv  Main link. No arguments.

”Ṙ   Set the left argument and the return value to the character 'Ṙ'.
  v  Dyadic eval; evaluate the return value with the left argument as argument.
     Executing the atom Ṙ on the argument 'Ṙ' prints a string representation of
     the character, i.e., the string "”Ṙ".
     Finally, v returns its unaltered argument, which is printed implicitly.

Quine

”ṘṘ

Probieren Sie es online!

Wie es funktioniert

”ṘṘ  Main link. No arguments.

”Ṙ   Set the left argument and the return value to the character 'Ṙ'.
  Ṙ  Print a string representation of the character, i.e., the string "”Ṙ".
     (implicit) Print the unaltered return value.

Da die zweite die ersten beiden Zeichen ( ”Ṙ) ausgibt, ist dies nach unserer Definition eine korrekte Quine.


1

Octopen-Baru, 22 Bytes

** Nicht konkurrierende Antwort

愛[35211].pack歩U')

Ruby-Ausgabe

puts [35211].pack(' U')

Welche Ausgänge . Welches ist eine Quine in Octopen-Baru!


1

7 , 2 Bytes, Sprachnachstellung

Das Programm ist zwei Bytes lang und kann auf verschiedene Arten interpretiert werden. als hex dump:

00000000: 4ff4                                     O.

als Codepage 437:

O⌠

oder, am lesbarsten, in oktal (die 7 nativ verwendet):

237723

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 7werden 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 , aber das ist meistens nur Zufall.


1

Unterlast, 11 Bytes

(:aSS)::aSS

Ziemlich einfach. Es wird gedruckt (:aSS):aSS, was die Standard-Unterlast-Quine ist.


1

Brachylog , 12 Bytes

"~k;?w₁"gjw₃

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:

{[[";?","gj","jḍ"],"₁₃₅₇"]j∋ᵐ{ḍ≠&};"\"~~k~ww~w\"~ww~w~n"}ᶠ{lw" metaquines generated:
"ẉ&}w₁ᵐ

Probieren Sie es online!

Es gibt zwei Teile des ursprünglichen Quine , die unlogisch ersetzt werden könnte: ;?geändert werden kann gjoder jḍ, 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.

;?, gjUnd jḍ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; gjWrappt 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 wIndizes sind austauschbar, da das Indexinventar für , obwohl es ursprünglich wnur 0 oder 1 annehmen konnte , wenn 0 die Eingabe in wdas erste und 1 das mit dem zweiten formatierte Element wdruckt, 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 vonwist 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.


0

Befunge-93, 22 Bytes

"+1_@#`+39:,g0:">:#,_@

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.


Könnten Sie nicht einfach das Standardquine nehmen und eine neue Zeile hinzufügen? Die neue Zeile verschwindet in der Analysephase und Sie haben nur die Standard-Quine (die sich selbst druckt).

0

Turtlèd , 52 Bytes (nicht konkurrierend )

1 weniger als ursprüngliches quine

@##'@r,r,r-{ +.r_}r{ +.r_}"#'@r,r,r-{ +.r_}r{ +.r_}"

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 .


0

Lua, 45 Bytes

Quine Code nicht meins.

s="s=%qprint(s:format(s))"print(s:format(s));

wird darin enden, dass

s="s=%qprint(s:format(s))"print(s:format(s))

das ist eine quine. Gut , dass das ;ist optional in Lua.


0

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.

95 34_"

Probieren Sie es online! Dies gibt aus:

95 34
_ "

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.


0

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.


Ich habe das nicht konkurrierende Bit entfernt, da neuere Sprachen gemäß den Richtlinien der Website nicht automatisch nicht konkurrieren.
Mego

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.