Double fonction: quine! DlroW, olleH

13

Écrivez un programme qui affichera son propre code source lors de son exécution, et rien d'autre. Semble facile, non?

Le hic, c'est que lorsque le code source est inversé, votre programme doit produire "Bonjour, World!" exactement, sans les guillemets.

C'est le code-golf, donc le nombre d'octets le plus bas l'emporte.

Edit : Votre quine doit être un quine approprié.

ericw31415
la source
4
@Mego pour être juste, ce n'est pas le genre de quine généralisé dont je parle ici, car ce n'est pas la "fonction d'impression X de votre code source". Cela dit, cela ne se jouera probablement pas très différemment des autres défis «lorsque vous inversez le programme ...» que nous avons.
Martin Ender
1
@ MartinBüttner C'est assez similaire aux défis que vous avez décrits que je pense que le même raisonnement s'applique.
Mego

Réponses:

8

Y, 19 octets

Upxp"!dlroW ,olleH"

Ucapture une chaîne avec Uau début jusqu'à ce que la suivante Usoit rencontrée, dans ce cas, le code source. pimprime l'article et xconstitue un lien de terminaison. Lorsqu'elle est inversée, cela ressemble à:

"Hello, World!"pxpU

Cela capture la chaîne et l'imprime avec p, terminant à nouveau le programme avec x.

Essayez-le ici!

Conor O'Brien
la source
4
Upousse Uimplicitement? ಠ_ಠ
Sp3000
1
@ Sp3000 Il est fait pour que le programme puisse se modifier lui-même. Plus techniquement, la Ucommande est la "commande de capture de maillon de chaîne". Il n'est pas fait pour quining, mais cela ne m'empêchera pas de l'utiliser pour quining. : P
Conor O'Brien
1
Je ne suis pas sûr que cela compte comme une quine appropriée. Notre définition nécessite une section du programme qui code pour une partie différente du programme , mais U...juste pour le code U....
Dennis
@Dennis définir des codes? Je pensais que le pbit faisait la sortie, ce qui faisait partie de l'encodage.
Conor O'Brien
1
J'ai pris l' encode comme quelque chose qui génère la sortie, donc pet xne compterait pas. Par exemple, le quine SMBF le plus court est toujours considéré comme un quine de triche, même si le code doit l'imprimer. Cela pourrait valoir la peine de demander des éclaircissements à Martin.
Dennis
20

JavaScript (ES6), 42 38 octets

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

Renversé

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

Explication

Lorsqu'elle est inversée, elle devient une fonction anonyme qui renvoie la chaîne Hello, World!.

L'expression régulière /\//gdevient un commentaire lorsqu'elle est inversée, ce qui permet >=_=fde mettre en commentaire le syntaxiquement invalide dans le code inversé.

user81655
la source
C'est très intelligent. :) Je n'aurais pas pensé à ça.
ericw31415
3
+1 juste pour les yeux fuyants-: =_=.
Darrel Hoffman
6

JavaScript (ES6), 71 octets

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

Comment ça fonctionne:

La ligne 1 définit la fonction trelaqui, lors de l'exécution, génère le code source du programme. La ligne 2 est une chaîne non affectée, ne fait rien. Appel des lignes 3 et 4trela abus de la syntaxe de la chaîne de modèle.

Renversé:

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

Comment ça fonctionne:

La ligne 1 est une chaîne non affectée, ne fait rien. Les lignes 2 et 3 abusent de la syntaxe de chaîne de modèle pour imprimer Hello, World!. La ligne 4 est un commentaire.

jrich
la source
Je vois que JavaScript semble avoir une certaine latitude avec sa syntaxe. Eh bien, au moins plus que Python. C'est zonte.
R. Kap
Le vide est-il ``inutile?
Rɪᴋᴇʀ
@EasterlyIrk Non, il est nécessaire d'appeler la trelafonction (qui imprime le quine) dans la version avant
jrich
@ jrich oh, je ne savais pas que ``c'était les arguments. Cool.
Rɪᴋᴇʀ
2
J'ai l'impression que je devrais m'habituer à voir trelapar ici ...> _>
Conor O'Brien
3

GolfScript, 29 28 octets

"` '. ~]' # \ "! dlroW, olleH". ~]

Il a une nouvelle ligne de fin. Essayez-le ici.

Renversé:

] ~. "Bonjour tout le monde!" \ # '] ~ .'` "

Essayez-le ici.

jimmy23013
la source
2

RETOUR , 94 octets

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

Renversé:

'!'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.

Sorties vers STDOUT. Jusqu'à ce que je trouve un meilleur cadre quine, cela devra faire pour l'instant.

Explication

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

Il contient la chaîne de quine. À l'inverse, cela est poussé vers la pile mais n'est pas sorti.

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

Cela pousse un caractère de citation dans la pile et génère le résultat deux fois jusqu'à ce qu'il ne reste plus rien à produire. En sens inverse, cela imprimera les charcodes déjà sur la pile.

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

Celui-ci fait apparaître l'élément de pile supérieur (en sens inverse, cela ferait apparaître un caractère d'espace) et pousse une série de codes de caractères dans la pile (en sens inverse, ces codes de caractères seront ensuite imprimés par la série de ,).

Mama Fun Roll
la source
Je ne peux pas dire si c'est un code RETOUR vraiment fou, ou juste un code RETOUR normal ._.
Downgoat
Tous les deux ;_; Je pleure tout le monde
Mama Fun Roll
2

Fission 2, 42 octets

Adaptation sans vergogne d'une excellente quine par @ MartinBüttner dans cette réponse

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

Essayez-le en ligne

Et inversé

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

Essayez-le en ligne

Dans la version quine, l'atome commence à Rdroite. Le "mode d'impression démarre qui passe au suivant "(lui-même). Cela imprime tout sauf le ". '!+définissez l'atome sur char ". Ol'imprime et détruit l'atome qui termine le programme.

La version inversée recommence au début Ret pour chaque caractère dans le Hello, Worldjeu, l'atome et l'imprime !sans détruire l'atome. Pour le caractère final, !l'empreinte Odétruit l'atome.

MickyT
la source
1

Javascript ES6, 55 octets

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

Assez simple, vraiment.

Mama Fun Roll
la source
0

Python 2, 131 octets

Vers l'avant:

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

Sens inverse:

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

La première moitié est une quine d'une ligne, suivie d'un #pour former un commentaire séparant la première moitié de la seconde moitié plus simple.

csvoss
la source
L'adaptation de cette quine Python donne_='_=%r;print _%%_#"!dlroW ,olleH"tnirp';print _%_#"!dlroW ,olleH"tnirp
Sp3000
0

C, 108 octets

char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";main(){printf(s,34,s,34);}//};)"!dlroW ,olleH"(stup{)(niam
mIllIbyte
la source
C99 je suppose?
Neil
0

Python 2, 70 octets

_='_=%r;print _%%_#"dlroW ,olleH"tnirp';print _%_#"!dlroW ,olleH"tnirp
Erik le Outgolfer
la source