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.