Angenommen, Sie haben zwei Sprachen A
und B
. Eine Zeichenfolge s
ist eine Semiquine in A
und B
wenn sie die folgenden Bedingungen erfüllt:
s
ist eine Quine in der SpracheA
.s
ist ein Polyglot inA
undB
.- Die Ausgabe beim Ausführen
s
alsB
Programm ist eine andere Zeichenfolges'
, bei der es sich um eine Quine handeltB
.
Das Ziel dieser Herausforderung ist es, eine Semiquine in zwei verschiedenen Sprachen zu schreiben. Dies ist Code-Golf , also gewinnt der kürzeste Code, wobei die früheste Antwort als Tiebreaker verwendet wird.
Regeln für Quines
Es werden nur echte Quines akzeptiert. Das heißt, Sie müssen den gesamten Quellcode wörtlich in STDOUT drucken, ohne :
- Lesen Sie Ihren Quellcode direkt oder indirekt.
- Verlassen Sie sich auf eine REPL-Umgebung, die einfach jeden Ausdruck auswertet und druckt, den Sie eingeben.
- Verlassen Sie sich auf Sprachfunktionen, die in bestimmten Fällen nur die Quelle ausdrucken.
- Verwenden von Fehlermeldungen oder STDERR, um das Quine ganz oder teilweise zu schreiben. (Sie können Dinge an STDERR schreiben oder Warnungen / nicht schwerwiegende Fehler erzeugen, solange STDOUT eine gültige Quine ist und die Fehlermeldungen nicht Teil davon sind.)
Darüber hinaus darf Ihr Quellcode nicht nur aus Literalen (ob Zeichenfolgenliterale, numerische Literale usw.) und / oder NOPs bestehen. Zum Beispiel `12
ist es ein Polyglot in Jelly und Pyth, aber in Jelly ist es ein NOP und ein numerisches Literal, daher ist es nicht gültig.
Jegliche nicht unterdrückbare Ausgabe (wie Copyright-Hinweise, Start- / Herunterfahrmeldungen oder ein nachfolgender Zeilenvorschub) kann in der Ausgabe aus Gründen der Gültigkeit des Quines ignoriert werden.
Regeln für Polyglotten
Die beiden verwendeten Sprachen müssen sich deutlich unterscheiden. Speziell:
- Es dürfen keine unterschiedlichen Versionen derselben Sprache sein (z. B. Python 2 vs. Python 3).
- Es dürfen keine unterschiedlichen Dialekte derselben Sprache sein (z. B. Pascal vs. Delphi).
- Eine Sprache ist möglicherweise keine Teilmenge der anderen (z. B. C vs. C ++ 1 ).
- Eine Sprache ist möglicherweise keine triviale Ableitung der anderen (z. B. Matlab vs. Octave 2 , Brainfuck vs. Boolfuck vs. TinyBF vs. ShadyAsFuck vs. alle anderen trivialen Brainfuck-Derivate).
Verschiedene Regeln
- Sie dürfen keine Eingaben von STDIN (oder einer anderen Quelle) akzeptieren. Wenn Ihre gewählte Sprache muss Eingabe nehmen, dann muss entweder die Eingabe leer (leere Zeichenkette, aus geleitet werden
/dev/null
, etc.) oder der Ausgabe des Programms muss hängt nicht von dem Eingang. - Für diese Herausforderung müssen Sie ein vollständiges Programm schreiben. Das Erfordernis von zusätzlichem Code zum Ausführen der Lösung ist nicht zulässig (z. B. Zuweisen und Aufrufen einer in der Lösung definierten Lambda-Funktion).
1: Ja, ich weiß, dass C nicht wirklich eine Teilmenge von C ++ ist. Es ist nah genug, um für Polyglots als eines angesehen zu werden, also zähle ich es für diese Herausforderung.
2: Wie Punkt 1 oben, obwohl Octave technisch nicht zu 100% mit Matlab kompatibel ist, wurde es so konzipiert, dass es kompatibel ist, und es ist nah genug, dass das Zulassen eines Matlab / Octave-Polyglots die Herausforderung trivialisieren würde.
Antworten:
GolfScript + Fission ,
1918 BytesDer nachlaufende Zeilenvorschub ist erforderlich.
Dies ist eine echte Quine in GolfScript. Probieren Sie es online aus!
In Fission wird gedruckt
Das ist eine wahre Quine in Fission . Probieren Sie es online aus!
Erläuterung
In GolfScript alles in der Form
ist eine Quine, solange
...
eine Schnur mit".~"
auf dem Stapel bleibt . Das.
dupliziert den Block, so dass am Ende eine Kopie gedruckt wird, und das~
führt es aus, sodass wir seinen Inhalt verwenden können, um das.~
selbst zu drucken . In diesem Fall drückt der Block die Zeichenfolgeund schneidet es dann auf die ersten beiden Zeichen mit ab
2<
.Das Fission-Programm funktioniert genau so wie das Quine selbst , da die erste und dritte Zeile vom Programm völlig ignoriert werden.
quelle
Ruby + (JavaScript oder Python 3), 76 Bytes
Dies ist eine weitere Herausforderung, die mit meiner neuen Lieblingssprache, der fast üblichen Teilmenge von Ruby, JavaScript und Python 3, gelöst werden kann. und da wir noch keine Antworten in exoterischen Sprachen haben und viele Leute gerne Lösungen sehen, die nicht Golf spielen, dachte ich, ich würde eine beitragen. Noch besser ist, dass dieselbe Antwort die Herausforderung auf verschiedene Weise gleichzeitig löst.
Hier ist
s
:Dies ist eine Quine in Ruby. Es ist kein Quine in JavaScript oder Python 3; Wenn Sie es in einer dieser Sprachen
s'
ausführen, hat die Ausgabe einen nachgestellten Zeilenumbruch und ist daher anders:Ist
s'
jedoch eine polyglotte Quine in JavaScript und Python 3! (Wie für mich üblich, verwende ich die Rhino-Implementierung von JavaScript, sowohl aus praktischen Gründen (da sie über die Befehlszeile ausgeführt wird, anstatt einen Browser zu benötigen) als auch weil sie eine seltsame Standardbibliothek hat, in die in dieprint
Standardausgabe geschrieben wird.) Beide Sprachen erzeugens'
als Ergebnis der Ausführung eines der beiden Programme.Als Bonus löst dieses Programm das Problem auch umgekehrt. Wenn Sie sich für die Ausführung
s'
in Ruby entscheiden, wird das ursprüngliche Programms
erneut gedruckt . Als solches'
ist eine gültige (aber etwas längere, mit 77 Bytes) Antwort auf die Frage.An diesem Punkt fange ich fast an zu denken, dass "Unterschiede, ob die Ausgabe mit einem Zeilenumbruch endet oder nicht, der ausreicht, um zwei Programme als unterschiedlich zu zählen", als Standardlücke angesehen werden sollten, da dies eine zweite Gruppe von Sprachen zu sein scheint (jenseits des bekannten GolfScript / CJam), in dem es möglich ist, den Trick durchzuziehen.
quelle
Vitsy (abgesicherter Modus) und Y, 9 Bytes, nicht konkurrierend.
In Vitsy ist dies eine Quine. In Y wird gedruckt
Ugrd3*Z'
; Beim Ausführen wird dies gedrucktUgrd3*Z'
, was in Y eine Quine ist. Y datiert die Frage jedoch nach.Was Vitsy sieht:
Was Y sieht:
quelle
CJam + GolfScript, 9 Bytes
Dies ist eine Quine in CJam. In GolfScript gibt es sich mit einem nachgestellten Zeilenumbruch aus, der in GolfScript eine Quine ist.
Ich bin mir nicht sicher, ob CJam als triviales Derivat von GolfScript angesehen werden sollte. Aber ich denke, sie sind ganz anders und zumindest nicht trivial.
quelle