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!


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:



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.


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)

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.


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.


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.


Sie infact können.
ATaco
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.