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.
Réponses:
RProgN , 3 octets
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é :
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é
qui, à son tour, imprime l'original.
! enilno ti yrT
la source
1\n1
, dans lequel les deux1
s s'encodent; c'est peut-être un quine approprié mais pas un quine inverse approprié.)Befunge-98 , 33 octets
Essayez-le en ligne!
la source
#
pour vous faire en-tête. Allez également sur Tryitonline.net et obtenez un interprète en ligneg
n'était pas autorisé dans les quines Befunge, car il lit la source du programme directement depuis la mémoire?Fission 2 , 10 octets
Essayez-le en ligne!
Cela imprime:
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:Ce programme a deux points d'entrée au
L
s, 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'L
définit la masse des atomes au point de code,L
mais ce n'est pas pertinent.;
détruit également cet atome et puisqu'il ne reste aucun atome, le programme se termine.Maintenant, l'inverse:
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,L
est ensuite ignoré et;
détruit l'atome et termine le programme.la source