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é.



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!


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é.


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.


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



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 ,).


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.


1

Javascript ES6, 55 octets

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

Assez simple, vraiment.


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.


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

C99 je suppose?
Neil

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.