Polyglot Quine vor und zurück!

9

Sie müssen einen Polyglot erstellen, der seinen Quellcode in einer Sprache und seinen Quellcode in einer anderen Sprache rückwärts ausgibt . Im Gegensatz zu den normalen Regeln können Sie die aktuelle Datei lesen oder eine integrierte Datei verwenden, um den Quellcode Ihrer Übermittlung abzurufen und diesen in einer Sprache umzukehren. Ihr Quellcode kann kein Palindrom sein.

Wenn Ihr Quellcode beispielsweise lautet abcxyz, muss er abcxyzin einer Sprache und zyxcbain einer anderen ausgegeben werden . Wenn Ihr Code ist abcxyzyxbca, ist er ungültig, weil er ein Palindrom ist.

Viel Glück!

programmer5000
quelle
3
Normale Regeln gibt es aus einem Grund. Das Zulassen von integrierten Quine-Elementen wird diese Herausforderung wahrscheinlich zu weit gefasst machen, und das Zulassen von Palindrom-Quellcodes ermöglicht Antworten, bei denen es sich um Quines für beide Sprachen handelt.
Erik der Outgolfer
@EriktheOutgolfer Palindrome sind jetzt nicht erlaubt.
Programmierer5000
1
@EriktheOutgolfer Ah, also kann der Quellcode kein Palindrom sein?
Luis Mendo
2
Ich denke, Sie sollten der ersten Person, die diese Herausforderung abschließt, ein Kopfgeld anbieten, ohne gegen die normalen Quine-Regeln zu verstoßen. (vielleicht 50 Wiederholungen?)
Clismique
1
Ich habe "in einer Sprache" gelesen, da der Fall, in dem beide Sprachen den Quellcode lesen, eindeutig nicht zulässig ist, aber die aktuelle Antwort mit den höchsten Stimmen macht genau das. Können Sie bearbeiten, um zu verdeutlichen, ob dies zulässig ist?
hvd

Antworten:

5

PHP & GolfScript, 2 Bytes

1

dh eine neue Zeile und die Ziffer 1.

Dies ist eine umgekehrte quine in GolfScript , auf dieser Seite beigetragen von Justin . PHP hat nicht ausgelöst, dass es sich um eine Programmiersprache handelt, daher druckt es seine Eingabe.

Gilles 'SO - hör auf böse zu sein'
quelle
6

Python 2 / Python 3, 71 Bytes

lambda _='lambda _=%r:(_%%_)[::int(1-(1/2)*4)]':(_%_)[::int(1-(1/2)*4)]

Verwendet keine Quine Builtins.

Vielen Dank an ovs, die mich generell geweckt haben.

Erik der Outgolfer
quelle
lambda _='lambda _=%r:(_%%_)[::int(1-(1/2)*4)]':(_%_)[::int(1-(1/2)*4)]für 71 Bytes
ovs
@ovs Oh natürlich, wie ich nicht daran gedacht habe.
Erik der Outgolfer
6

Batch / Bash + Tac, 39 Bytes

:;tac -r -s '.\|'$'\n' $0;exit
@type %0

Ausgabe im Stapel vorwärts. Erläuterung: Batch sieht die erste Zeile als Beschriftung und ignoriert sie, während die zweite Zeile die Quelldatei einfach nach STDOUT kopiert. (Beachten Sie, dass Sie die Datei mit Erweiterung aufrufen müssen, ändern oder %0zu %~f0.) bashSieht vier Befehle:

  • :tut nichts (wie true)
  • tac -r -s '.\|'$'\n' $0
    • -rversetzt tacin den Regex-Modus
    • -s Gibt einen regulären Ausdruck an
    • '.\|'$'\n' ist der Regex, zusammengesetzt aus
      • . Beliebiges Zeichen außer Zeilenumbruch
      • \| oder
      • $'\n' eine neue Zeile
    • Das Ergebnis ist, dass tacdie Datei eher in Zeichen als in Zeilen aufgeteilt wird.
  • exit Stoppt das Skript und ignoriert den vierten Befehl
  • @type %0 (ignoriert)
Neil
quelle
Ich denke, dass Sie die erste Zeile durch ersetzen können :;rev $0|tac;exit. Außerdem sollte der Header stattdessen Batch / sh + util-linux + coreutils enthalten .
Erik der Outgolfer
@EriktheOutgolfer $'\n'ist ein Bashismus, rev $0|tackehrt Zeilenumbrüche nicht richtig um und ist es wirklich wichtig, dass sie tacin einem Paket enthalten sind?
Neil
$'\n'existiert nicht in dem von mir vorgeschlagenen Ersatz und rev $0|tacfunktioniert für mich. Und ich denke, es ist besser, die Pakete anstelle der einzelnen Dienstprogramme anzugeben, da manchmal Verwirrung entstehen kann (z. B. welche Pakete tac?).
Erik der Outgolfer
@EriktheOutgolfer Probieren Sie es online aus! ist falsch. Also ist Try it online! (aber subtiler).
Neil
Könnten Sie bitte eine Erklärung geben?
Programmierer5000
3

PHP & Retina, 2 Bytes

1

Das gleiche wie Gilles PHP & GolfScript Antwort.

PHP liest nur den Code und gibt ihn direkt aus. Retina ersetzt Übereinstimmungen einer leeren Zeichenfolge in der Eingabe und ersetzt sie durch 1 und gibt diese durch eine neue Zeile aus.

Okx
quelle
2

JS (ES5), JS (ES6), 94 Bytes

function f(){try{eval("x=(f+'f()').split``.reverse().join``")}catch(e){x=f+"f()"};return x}f()

Verwendet keine eingebauten Quine. Verwendet nur die Tatsache, dass JS-Funktionen zu ihrem Code stringifizieren. Kann wahrscheinlich mehr Golf gespielt werden.

programmer5000
quelle
1

Wenn Sie das Lesen des Quellcodes zulassen, handelt es sich nicht wirklich um eine Quine.

PHP & sh + util-linux, 6 Bytes

rev $0

Ich bin sicher, dass die üblichen Golfsprachen dies in 2 Bytes tun können.

Gilles 'SO - hör auf böse zu sein'
quelle
Sie infact können.
ATaco