Periode 2 Umgekehrte Quine

10

Ihre Aufgabe ist es, ein Programm zu schreiben, das seinen eigenen Quellcode in umgekehrter Reihenfolge ausgibt. Wenn der umgekehrte Code ausgeführt wird, sollte er jedoch den Quellcode in die richtige Richtung ausgeben.

Beispiel

Angenommen, Ihr Programm ist abc. Beim Ausführen sollte es ausgegeben werden cba. cbasollte beim Ausführen ausgegeben werden abc.

Regeln

Ihr Programm sollte alle Regeln einer richtigen Quine befolgen (außer für die Ausgabe des Quellcodes). Palindrome sind nicht erlaubt.

Zufällige Anmerkung: Ich bin mir dessen bewusst, aber ich glaube, dass diese Herausforderung anders ist, da der transformierte Code dieselben Eigenschaften haben muss.

Internetnutzer
quelle
Verwandte
HyperNeutrino
Auch verwandt.
Martin Ender

Antworten:

9

RProgN , 3 Bytes

1
2

Vielen Dank an @MartinEnder, der mich an diese Antwort erinnert hat .

Probieren Sie es online aus!

Wie es funktioniert

Dies nutzt einen potenziellen Fehler in unserer Definition von richtigem Quine aus :

Es muss möglich sein, einen Abschnitt des Programms zu identifizieren, der einen anderen Teil des Programms codiert. ("Unterschiedlich" bedeutet, dass die beiden Teile an unterschiedlichen Positionen angezeigt werden.)

Darüber hinaus darf ein Quine weder direkt noch indirekt auf seine eigene Quelle zugreifen.

Dies ist hier offensichtlich der Fall, da die Ausgabe die Umkehrung des Codes ist und der Code kein Palindrom ist.

RProgN - Reverse Programmer Notation - verwendet einen LIFO-Stapel und druckt die Elemente in der Reihenfolge, in der sie angezeigt werden, darauf. Die beiden durch Leerzeichen und / oder Zeilenumbrüche getrennten Token 1 und 2 werden in umgekehrter Reihenfolge angezeigt und durch einen Zeilenumbruch getrennt gedruckt.

Dies druckt das umgekehrte Programm

2
1

welches wiederum das Original druckt.

! enilno ti yrT

Dennis
quelle
Ich mag die URL.
Christopher
4
Wir sollten das beheben ... Ich würde eine neue Antwort (basierend auf diesem Kommentar ) auf die Meta-Frage posten , aber es würde wahrscheinlich nicht genug Aufmerksamkeit bekommen, um mit den vorhandenen Antworten zu konkurrieren.
ETHproductions
2
@ETHproductions: Mach es. Ich bin der Meinung, dass es einige Probleme mit unserer aktuellen richtigen Quine-Definition gibt. (Wahrscheinlich ist meine Sprache 7 eine Studie in Randfällen für die richtige Quinenz; zusätzlich zu diesem speziellen Fall kann sie auch einige andere behandeln.) FWIW, ich bin mir nicht sicher, ob dies selbst nach unserer derzeitigen Situation eine richtige Umkehrung ist Definition; Die 1 und 2 sind eindeutig von selbst codiert, daher besteht das einzige potenzielle Interesse darin, was die Newline codiert. (Dies unterscheidet sich von a 1\n1, in dem sich die beiden 1s gegenseitig codieren; das ist möglicherweise eine richtige Quine, aber keine richtige Reverse-Quine.)
9

Befunge-98 , 33 Bytes

b3*>1#;-:0g,:#;_@_;#:,g0:-;#1>*b3

Probieren Sie es online aus!

IQuick 143
quelle
Schöne erste Antwort. Aber verwenden Sie die #, um Sie Header zu machen. Gehen Sie auch zu Tryitonline.net und holen Sie sich einen Online-Dolmetscher
Christopher
2
Gehen Sie auch unter die Schaltfläche Speichern und verwenden Sie die Codegolf-Übermittlung.
Christopher
Ich habe es auf TIO an erster Stelle bearbeitet. Ich habe nur vergessen, den Link hinzuzufügen, aber jetzt ist es hinzugefügt und danke für den Header-Tipp
IQuick 143
Beachten Sie, dass die Option "Codegolf-Übermittlung" in TIO eine Startvorlage einschließlich des Headers enthält.
Ørjan Johansen
Ich dachte g, in Befunge-Quines nicht erlaubt zu sein, da es die Quelle des Programms direkt aus dem Speicher liest?
7

Spaltung 2 , 10 Bytes

"L;L'!+!'_

Probieren Sie es online aus!

Dies druckt:

_'!+!'L;L"

Probieren Sie es online aus!

Und umgekehrt.

Erläuterung

Dies ist eine Modifikation des Reverse Quine . Dies wirkt sich zu unserem Vorteil aus, da !es zum Drucken verwendet wird und auch nur einen Codepunkt vom Angebot entfernt ist ". Dies macht es einfacher, den Angebotsdruckbereich palindromisch zu gestalten '!+!'. Beginnen wir mit dem ersten Code:

"L;L'!+!'_

Dieses Programm hat zwei Einstiegspunkte am Ls, die jeweils ein linksgerichtetes Atom erzeugen. Der Richtige trifft jedoch sofort den, ;der ihn zerstört. Der linke wechselt in den String-Modus und wird bis zum Ende umgebrochen, sodass der gesamte Code (mit Ausnahme des ") von hinten nach vorne gedruckt wird . Das gibt uns schon _'!+!'L;L. Sie müssen nur noch das drucken ". _kann ignoriert werden, '!setzt die Masse des Atoms auf 33 (den Codepunkt von !), +erhöht es auf "und !druckt es aus. Das ist alles, was getan wird. Das 'Lsetzt die Atommasse auf den Codepunkt von, Laber das ist irrelevant. ;zerstört auch dieses Atom und da keine Atome mehr übrig sind, wird das Programm beendet.

Nun umgekehrt:

_'!+!'L;L"

Wir haben wieder zwei Einstiegspunkte, aber ein Atom wird sofort zerstört. Dieses Mal gehen wir !+!'zuerst den Abschnitt durch und drucken zunächst ein Angebot. Das '_ist wieder irrelevant, aber wir brauchen das _(oder einen anderen nutzlosen Charakter) hier, um nicht dem zu 'entkommen ". Das Atom wird bis zum Ende umbrochen, durchläuft den Quellcode einmal im String-Modus, um den Rest des Programms in umgekehrter Reihenfolge zu drucken. Das Atom Lwird dann ignoriert und ;zerstört das Atom und beendet das Programm.

Martin Ender
quelle