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
. cba
sollte 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.
Antworten:
RProgN , 3 Bytes
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 :
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
welches wiederum das Original druckt.
! enilno ti yrT
quelle
1\n1
, in dem sich die beiden1
s gegenseitig codieren; das ist möglicherweise eine richtige Quine, aber keine richtige Reverse-Quine.)Befunge-98 , 33 Bytes
Probieren Sie es online aus!
quelle
#
, um Sie Header zu machen. Gehen Sie auch zu Tryitonline.net und holen Sie sich einen Online-Dolmetscherg
, in Befunge-Quines nicht erlaubt zu sein, da es die Quelle des Programms direkt aus dem Speicher liest?Spaltung 2 , 10 Bytes
Probieren Sie es online aus!
Dies druckt:
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:Dieses Programm hat zwei Einstiegspunkte am
L
s, 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'L
setzt die Atommasse auf den Codepunkt von,L
aber das ist irrelevant.;
zerstört auch dieses Atom und da keine Atome mehr übrig sind, wird das Programm beendet.Nun umgekehrt:
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 AtomL
wird dann ignoriert und;
zerstört das Atom und beendet das Programm.quelle