In meiner Zeit bei PPCG habe ich festgestellt, dass Quine-Probleme und Polyglot-Probleme sehr beliebt sind. Auch Meta-Lösungen für Probleme, dh Skripte, die ein Programm generieren, das die Lösung für ein Problem darstellt, werden von der Community häufig positiv bewertet. Deshalb habe ich diese Herausforderung geschaffen, die diese drei Ideen umsetzt.
Ihre Aufgabe, Leser und Code-Golf- Enthusiast, ist es dann, so kurz wie möglich ein Skript zu erstellen, das in zwei Sprachen A und B ausgeführt werden kann, um Quines für A und B zu generieren. Wenn Ihr Programm in Sprache A ausgeführt wird, sollte es eine generieren Programm, das eine Quine in Sprache B ist, aber nicht in Sprache A und umgekehrt. Die Sprachen A und B können unterschiedliche Versionen derselben Sprache sein, vorausgesetzt, dass die generierten Quines nur in einer der Versionen funktionieren sollten.
Beachten Sie, dass die Standardlücken als geschlossen betrachtet werden sollten und nur einwandfreie Quines zulässig sind.
Viel Glück, die wenigsten Charaktere gewinnen!
Antworten:
CJam 0.6.6 dev / GolfScript,
151412 BytesDanke an @ jimmy23013 für das Golfen mit 2 Bytes!
Ruhe, um aktualisiert zu werden.
Nachprüfung
Da die Übermittlung signifikante Leerzeichen enthält, ist es am besten, Hexdumps zu vergleichen.
CJam
CJam-Ausdrucke
"`0$~"0$~
und ein Zeilenvorschub am Ende. Probieren Sie es online!Das generierte Programm druckt
"`0$~"0$~
mit dem nachfolgenden Zeilenvorschub in GolfScript ( Online testen ! ), Jedoch ohne den Zeilenvorschub in CJam ( Online testen ! ).Wie das Metaquin funktioniert
Wie das Quine funktioniert
Im Gegensatz zu GolfScript druckt CJam standardmäßig keinen abschließenden Zeilenumbruch, daher ist dies in CJam kein Quine.
GolfScript
GolfScript druckt
"`0$~"0$~
ohne Leerzeichen. Probieren Sie es online!Das generierte Programm druckt
"`0$~"0$~
ohne Leerzeichen in CJam ( Online testen ! ), Aber GolfScript fügt einen Zeilenvorschub an ( Online testen ! ).Wie das Metaquin funktioniert
Wie das Quine funktioniert
Im Gegensatz zu CJam hängt GolfScript einen Zeilenvorschub an den Inhalt des Stapels an, sodass dies in GolfScript kein Quine ist.
quelle
"0$p"0$~a:n;
.a:n
, aber das Verwenden istp
mir nicht eingefallen .CJam / Fission, 22 Bytes
Probieren Sie es in CJam. Probieren Sie es in Fission.
In CJam wird die Standard-Fission-Quine gedruckt :
Probieren Sie die Fission Quine.
In Fission wird eine
"
-lose Variante des Standard-CJam-Quine ausgegeben:Probieren Sie die CJam Quine.
Dies funktioniert auch für 22 Bytes (Drucken der gleichen Quines):
Erläuterung
In CJam:
Am Ende des Programms enthält der Stapel die Zeichenfolge
"'!+OR"
und das Zeichen"
, die beide implizit gedruckt werden.In Fission beginnt der Programmablauf
R
mit einem rechts stehenden Atom.'"
nur ändert sich die Atome Masse)
,5
und-
werden aus verschiedenen Gründen ignoriert. Dann wechselt das Atom in den Druckmodus"
und druckt{'_'~}_~
.;
zerstört das Atom und beendet das Programm.quelle
{'_'~}
Clojure / Common Lisp, 274 Bytes
Einige Leerzeichen zur besseren Lesbarkeit hinzugefügt
Definiert grundsätzlich ein Makro, das in Clojure ein Quine zurückgibt. Clojure benötigt Parameter für die Makrodefinition, die als vector (
[]
) angegeben werden, während Common Lisp (zum Glück) diese nur ignoriert. Danach unterscheiden wir 2 Sprachen, indem wir auswerten,'()
wasnil
in Common Lisp undtrue
in Clojure gleich und somit falsch ist . Dann führen wir String-Manipulationen mit Clojure durch, das Common Lisp nicht einmal auszuwerten versucht, während es in einem anderenif
Zweig läuft . Auf der anderen Seite versucht Clojure vor der Ausführung zu überprüfen, ob ein anderer Zweig mindestens korrekt ist. Daher musste ereval
dort verwendet werden, um in Clojure korrekt zu sein und die richtige Zeichenfolge in Common Lisp auszugeben.Hinweis: Wenn Sie nur zwei verschiedene Zeichenfolgen zurückgeben, ist dies wahrscheinlich kürzer, unterscheidet sich jedoch nicht von einer mehrsprachigen Herausforderung bei der Ausgabe verschiedener Zeichenfolgen in verschiedenen Sprachen. ¯ \ _ (ツ) _ / ¯
Führen Sie Clojure Original Source aus: https://ideone.com/SiQhPf
Gemeinsame Lisp-Originalquelle: https://ideone.com/huLcty
Clojure-Ausgabe:
((LAMBDA (S) (PRINT (LIST S (LIST 'QUOTE S)))) '(LAMBDA (S) (PRINT (LIST S (LIST 'QUOTE S)))))
Gemeinsame Lisp-Ausgabe:
((fn [s] (print (list s (list (quote quote) s)))) (quote (fn [s] (print (list s (list (quote quote) s))))))
Clojure-Ausgabe wird in Common Lisp ausgeführt: https://ideone.com/T1DF7H
Umgekehrt: https://ideone.com/Fezayq
quelle
Jelly / GolfScript,
18 bis16 BytesNachprüfung
Das Testen aller beteiligten Programme mit den genauen Byteströmen ist nur lokal möglich.
Gelee
Mit Jellys Codepage sieht das Programm folgendermaßen aus.
Diese Abzüge ( Online ausprobieren! )
Das ist eine Quine in GolfScript ( Online testen ! ), aber ein Parser-Fehler in Jelly ( Online testen ! ).
GolfScript
In Latin-1 sieht das Programm wie folgt aus, mit einem nicht druckbaren DEL-Zeichen zwischen
}
undþ
.Diese Abzüge ( Online ausprobieren! )
oder, visualisiert mit Jellys Codepage,
Dies ist eine Quine in Jelly ( Online testen ! ), druckt jedoch nur einen Zeilenvorschub in GolfScript ( Online testen ! ).
quelle
”ṘṘ
, alsoØV
sollte weg sein, oder?JavaScript / C 278 Bytes
Bei atemberaubenden 278 Bytes:
Die C-Quine:
int main(){char*A="int main(){char*A=%c%s%c;printf(A,34,A,34);}";printf(A,34,A,34);}
Die JavaScript-Quine:
A='A=;B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));';B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));
quelle
Befunge / Fission, 35 Bytes
Probieren Sie es in Befunge | Probieren Sie es in Fission
In Befunge entsteht die Fission quine :
In Fission ergibt dies die Befunge quine :
quelle
Python / Retina,
70656466 BytesIch habe die gleiche Strategie verwendet, die ich in meinem vorherigen Python / Retina-Polyglot verwendet habe .
Versuchen Sie es in Python | Versuchen Sie es in Retina
#
ist ein Kommentar in Python, der einfach die Retina quine in Python ausgibt. In Retina macht die erste Stufe (2 Zeilen) nichts, da#
in der Eingabe kein gefunden wird. Die nächste Stufe ersetzt nichts mit der Grundlage der Python-Quine. Die dritte Stufe ersetzt jedes Semikolon durch das#print _%
Stück. Die letzte Stufe entfernt alles#
.Quine in der Retina:
Quine in Python:
Die verwendeten Quines können in dieser Herausforderung gesehen werden . Die Retina-Quine ist ein Fehler in Python, und die Python-Quine hat keine Ausgabe in Retina.
quelle
Python 3 / Python 2, 62 Bytes
Probieren Sie es in Python 2 , Python 3 .
Basierend auf dem Python Quine hier . Der Unterscheidungsfaktor zwischen den beiden Versionen ist, was sie tun
int(-1/2)
: In Python 2/
ist Integer Division (Abrunden) mit einem Ergebnis von-1
; in Python 3/
ist Gleitkommadivision (-0.5
), die aufint
abgeschnitten wird0
.Wir bauen eine Saite
_
in drei Teilen.'_=%r;print(_%%_['
und'int(-1/2):])'
sind immer gleich. Der interessante Teil ist'~'*-~int(-1/2)
:-~int(-1/2)
ist0
und die Tilde wird der Zeichenfolge nicht hinzugefügt.-~int(-1/2)
ist1
und die Tilde wird der Zeichenfolge hinzugefügt.Somit gibt Python 2 die Python 3-Quine aus
und Python 3 gibt die Python 2-Quine aus
In jeder Version wird der Ausdruck im Inneren zu
[ :]
ausgewertet0
, wodurch das Segment die gesamte Zeichenfolge enthält, während das Segment in der falschen Sprache-1
nur das letzte Zeichen enthält und die Ausgabe abschneidet, sodass es kein vollständiges Quine ist.quelle
Brain-Flak , Brainfuck
46174009 BytesProbieren Sie es online!
Probieren Sie es online!
Erklärung ist auf dem Weg Ich spiele immer noch Golf
quelle