Période 2 inversée Quine

10

Votre tâche consiste à écrire un programme qui génère son propre code source à l'envers. Cependant, lorsque le code inversé est exécuté, il doit sortir le code source, dans le bon sens.

Exemple

Dites que votre programme l'est abc. Lorsqu'il est exécuté, il devrait sortir cba. cba, lors de l'exécution, devrait sortir abc.

Règles

Votre programme doit suivre toutes les règles d'un quine approprié (à l'exception de la sortie du code source). Les palindromes sont interdits.

Note aléatoire: je suis conscient de cela, mais je pense que ce défi est différent car le code transformé doit avoir les mêmes propriétés.

internet_user
la source
Connexes
HyperNeutrino
Également lié.
Martin Ender

Réponses:

9

RProgN , 3 octets

1
2

Merci à @MartinEnder de m'avoir rappelé cette réponse .

Essayez-le en ligne!

Comment ça fonctionne

Cela exploite une faille potentielle dans notre définition du quine approprié :

Il doit être possible d'identifier une section du programme qui code pour une partie différente du programme. ("Différent" signifie que les deux parties apparaissent dans des positions différentes.)

De plus, un quine ne doit pas accéder à sa propre source, directement ou indirectement.

C'est évidemment le cas ici, car la sortie est l'inverse du code et le code n'est pas un palindrome.

RProgN - notation de programmation inversée - utilise une pile LIFO et imprime les éléments dessus dans leur ordre de saut. Les deux jetons 1 et 2 , séparés par des espaces et / ou des sauts de ligne, sont sautés dans l'ordre inverse et sont imprimés séparés par un saut de ligne.

Ceci imprime le programme inversé

2
1

qui, à son tour, imprime l'original.

! enilno ti yrT

Dennis
la source
J'aime l'URL.
Christopher
4
Nous devrions résoudre ce problème ... Je publierais une nouvelle réponse (basée sur ce commentaire ) sur la méta-question, mais cela n'attirerait probablement pas assez l'attention pour concurrencer les réponses existantes.
ETHproductions
2
@ETHproductions: Faites-le. Je pense qu'il y a plusieurs problèmes avec notre définition actuelle de quine. (On peut dire que ma langue 7 est une étude dans les cas marginaux pour la quinicité appropriée; en plus de ce cas particulier, il peut en gérer plusieurs autres.) FWIW, je ne suis pas sûr que ce soit une inverse quine appropriée, même par notre courant définition; les 1 et 2 sont clairement encodés par eux-mêmes, donc le seul intérêt potentiel est de savoir ce qui encode la nouvelle ligne. (Ceci est différent de a 1\n1, dans lequel les deux 1s s'encodent; c'est peut-être un quine approprié mais pas un quine inverse approprié.)
9

Befunge-98 , 33 octets

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

Essayez-le en ligne!

IQuick 143
la source
Belle première réponse. Mais utilisez le #pour vous faire en-tête. Allez également sur Tryitonline.net et obtenez un interprète en ligne
Christopher
2
Allez également sous le bouton Enregistrer et utilisez celui de soumission de codegolf.
Christopher
Je l'ai édité sur TIO en premier lieu, j'ai juste oublié d'ajouter le lien mais maintenant il a été ajouté et merci pour le conseil d'en-tête
IQuick 143
Notez que l'option "soumission de codegolf" sur TIO vous donne un modèle de départ, y compris l'en-tête.
Ørjan Johansen
Je pensais que cela gn'était pas autorisé dans les quines Befunge, car il lit la source du programme directement depuis la mémoire?
7

Fission 2 , 10 octets

"L;L'!+!'_

Essayez-le en ligne!

Cela imprime:

_'!+!'L;L"

Essayez-le en ligne!

Et vice versa.

Explication

Il s'agit d'une modification du quine inverse . Cela fonctionne à notre avantage ici, qui !est utilisé pour l'impression et n'est également qu'à un point de code du devis ". Cela rend plus facile de rendre la section d'impression de devis palindromique (la '!+!'). Commençons par le premier code:

"L;L'!+!'_

Ce programme a deux points d'entrée au Ls, ce qui crée chacun un atome de gauche. Cependant, le bon frappe immédiatement le ;qui le détruit. Celui de gauche passe en mode chaîne et s'enroule jusqu'à la fin, de sorte qu'il imprime le code entier (sauf le ") de l'arrière vers l'avant. Cela nous donne déjà _'!+!'L;L. Il ne reste plus qu'à imprimer le ". _peut être ignoré, '!définit la masse de l'atome sur 33 (le point de code de !), l' +incrémente "et l' !imprime. C'est tout le résultat fait. Le 'Ldéfinit la masse des atomes au point de code, Lmais ce n'est pas pertinent. ;détruit également cet atome et puisqu'il ne reste aucun atome, le programme se termine.

Maintenant, l'inverse:

_'!+!'L;L"

Encore une fois, nous avons deux points d'entrée mais un atome est immédiatement détruit. Cette fois, nous parcourons d' !+!'abord la section, nous commençons donc par imprimer un devis. Le '_est à nouveau hors de propos, mais nous avons besoin du _(ou d'un autre caractère inutile) ici pour éviter de 's'échapper du ". L'atome passe à la fin, traverse le code source une fois en mode chaîne pour imprimer le reste du programme en sens inverse, Lest ensuite ignoré et ;détruit l'atome et termine le programme.

Martin Ender
la source