Double-Duty-Quine: Quine!

13

Schreiben Sie ein Programm, das beim Ausführen seinen eigenen Quellcode ausgibt, und sonst nichts. Scheint einfach, oder?

Der Haken ist, dass Ihr Programm "Hallo Welt!" Ausgeben muss, wenn der Quellcode umgekehrt wird. genau, ohne die Anführungszeichen.

Dies ist Codegolf, daher gewinnt die niedrigste Bytezahl.

Bearbeiten : Ihre quine muss eine richtige quine sein.

ericw31415
quelle
4
@Mego um fair zu sein, das ist nicht die Art von verallgemeinertem Quine, von dem ich rede, da dies nicht die "Druckfunktion X Ihres Quellcodes" ist. Das heißt, es wird wahrscheinlich nicht ganz anders ablaufen als die anderen "wenn Sie das Programm umkehren ..." Herausforderungen, die wir haben.
Martin Ender
1
@ MartinBüttner Es ist ähnlich genug zu den Herausforderungen, die Sie beschrieben haben, dass ich die gleiche Argumentation für richtig halte.
Mego

Antworten:

8

Y, 19 Bytes

Upxp"!dlroW ,olleH"

UErfasst eine Zeichenfolge mit Uam Anfang, bis die nächste Uerfüllt ist, in diesem Fall der Quellcode. pdruckt das Objekt und xist ein Terminierungslink. In umgekehrter Reihenfolge sieht das so aus:

"Hello, World!"pxpU

Dies erfasst den String und druckt ihn mit aus p, wobei das Programm erneut mit beendet wird x.

Probieren Sie es hier aus!

Conor O'Brien
quelle
4
Udrückt Uimplizit? ಠ_ಠ
Sp3000
1
@ Sp3000 Es ist so gemacht, dass sich das Programm selbst ändern kann. Technisch gesehen ist der UBefehl der "Chain-Link-Capture-Befehl". Es ist nicht zum Quinieren gedacht, aber das hindert mich nicht daran, es zum Quinieren zu verwenden. : P
Conor O'Brien
1
Ich bin mir nicht sicher, ob dies eine echte Quine ist. Unsere Definition erfordert einen Teil des Programms, der einen anderen Teil des ProgrammsU... codiert , aber nur codiert U....
Dennis
@Dennis Kodierungen definieren? Ich dachte, das pBit erledigt die Ausgabe, die Teil der Codierung war.
Conor O'Brien
1
Ich nahm kodieren als etwas , das die Ausgabe erzeugt, so pund xwürde nicht zählen. Beispielsweise wird die kürzeste SMBF-Quine immer noch als Cheating-Quine betrachtet, obwohl der Code sie drucken muss. Es könnte sich jedoch lohnen, Martin um Klärung zu bitten.
Dennis
20

JavaScript (ES6), 42 38 Byte

f=_=>/\//g&&"f="+f||"!dlroW ,olleH">=_

Rückgängig gemacht

_=>"Hello, World!"||f+"=f"&&g//\/>=_=f

Erläuterung

Wenn umgekehrt, wird es eine anonyme Funktion, die die Zeichenfolge zurückgibt Hello, World!.

Der reguläre Ausdruck /\//gwird zu einem Kommentar, wenn er umgekehrt wird, wodurch der syntaktisch ungültige >=_=fCode im umgekehrten Code auskommentiert werden kann.

user81655
quelle
Das ist sehr schlau. :) Daran hätte ich nicht gedacht.
ericw31415
3
1 nur für die Shifty-Augen: =_=.
Darrel Hoffman
6

JavaScript (ES6), 71 Byte

trela=a=>alert("trela="+trela+"\ntrela\n``")//
`!dlroW ,olleH`
trela
``

Wie es funktioniert:

Zeile 1 definiert eine Funktion trela, die beim Ausführen den Quellcode des Programms ausgibt. Zeile 2 ist eine nicht zugewiesene Zeichenfolge, die nichts bewirkt. In den Zeilen 3 und 4 wird treladie Syntax der Vorlagenzeichenfolge missbraucht.

Rückgängig gemacht:

``
alert
`Hello, World!`
//)"``n\alertn\"+alert+"=alert"(trela>=a=alert

Wie es funktioniert:

Zeile 1 ist eine nicht zugewiesene Zeichenfolge, die nichts bewirkt. Die Zeilen 2 und 3 missbrauchen die zu druckende Template-String-Syntax Hello, World!. Zeile 4 ist ein Kommentar.

jrich
quelle
Ich sehe, dass JavaScript in seiner Syntax einen gewissen Spielraum zu haben scheint. Zumindest mehr als Python. Das ist schön.
R. Kap
Ist das leer ``unnötig?
4.
@EasterlyIrk Nein, es ist notwendig, die trelaFunktion (die den Quine druckt) in der Vorwärtsversion
aufzurufen
@jrich oh, mir war nicht klar, dass das ``die Argumente waren. Cool.
4.
2
Ich habe das Gefühl, ich sollte mich daran gewöhnen, hier etwas zu sehen trela...> _>
Conor O'Brien
2

RETURN , 94 Bytes

"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'

Rückgängig gemacht:

'!'d'l'r'o'w' ','o'l'l'e'H' %,,,,,,,,,,,,,¤¤43"'!'d'l'r'o'w' ','o'l'l'e'H' %,,,,,,,,,,,,,¤¤43"

Try it here.

Ausgänge zu STDOUT. Bis ich einen besseren Rahmen für Quines gefunden habe, muss dies vorerst tun.

Erläuterung

"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'"

Dieser enthält den Quine-String. Umgekehrt wird dies auf den Stapel geschoben, aber nicht ausgegeben.

34¤¤,,,,,,,,,,,,,

Dadurch wird ein Anführungszeichen in den Stapel verschoben und das Ergebnis zweimal ausgegeben, bis nichts mehr auszugeben ist. In umgekehrter Reihenfolge werden die bereits auf dem Stapel befindlichen Zeichencodes gedruckt.

% 'H'e'l'l'o',' 'w'o'r'l'd'!'

Dieser öffnet das oberste Stapelelement (in umgekehrter Richtung würde dies ein Leerzeichen öffnen) und schiebt eine Reihe von Zeichencodes auf den Stapel (in umgekehrter Richtung würden diese Zeichencodes später durch die Reihe von gedruckt werden ,).

Mama Fun Roll
quelle
Ich kann nicht sagen, ob dies wirklich verrückter RÜCKGABE-Code ist oder nur normaler RÜCKGABE-Code ._.
Downgoat
Beide ;_; Ich weine everytiem
Mama Fun Roll
2

Spaltung 2, 42 Bytes

Schamlose Anpassung eines exzellenten Quines von @ MartinBüttner in dieser Antwort

'!+O!'!d'!l'!r'!o'!W'! '!,'!o'!!l'!e'!H'R"

Probieren Sie es online aus

Und umgekehrt

"R'H!'e!'l!!'o!',!' !'W!'o!'r!'l!'d!'!O+!'

Probieren Sie es online aus

In der Quine-Version beginnt das Atom an der RÜberschrift rechts. Damit wird "der Druckmodus gestartet, der zum nächsten Druckmodus "(selbst) übergeht . Dies druckt alles aus, mit Ausnahme der ". '!+setze das Atom auf char ". Odruckt es aus und zerstört das Atom, wodurch das Programm beendet wird.

Die umgekehrte Version beginnt Rerneut und setzt für jedes Zeichen Hello, Worlddas Atom und druckt !es aus, ohne das Atom zu zerstören. Für das letzte Zeichen zerstört der !Abdruck Odas Atom.

MickyT
quelle
1

Javascript ES6, 55 Bytes

$=_=>`$=${$};$()//"!dlroW ,olleH"`;$()//"!dlroW ,olleH"

Ganz einfach.

Mama Fun Roll
quelle
0

Python 2, 131 Bytes

Nach vorne:

print(lambda x:x+repr(x)+")#'!dlroW ,olleH' tnirp")('print(lambda x:x+repr(x)+")#\'!dlroW ,olleH\' tnirp")(')#'!dlroW ,olleH' tnirp

Umkehren:

print 'Hello, World!'#)'()"print '\Hello, World!'\#)"+)x(rper+x:x adbmal(tnirp'()"print 'Hello, World!'#)"+)x(rper+x:x adbmal(tnirp

Die erste Hälfte ist ein einzeiliges Quine, gefolgt von einem #, um einen Kommentar zu bilden, der die erste Hälfte von der einfacheren zweiten Hälfte trennt.

csvoss
quelle
Anpassung dieser Python-Quine gibt_='_=%r;print _%%_#"!dlroW ,olleH"tnirp';print _%_#"!dlroW ,olleH"tnirp
Sp3000
0

C 108 Bytes

char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";main(){printf(s,34,s,34);}//};)"!dlroW ,olleH"(stup{)(niam
mIllIbyte
quelle
C99 nehme ich an?
Neil
0

Python 2, 70 Bytes

_='_=%r;print _%%_#"dlroW ,olleH"tnirp';print _%_#"!dlroW ,olleH"tnirp
Erik der Outgolfer
quelle