Python 3 / > <> , 177 173 172 167 octets
Merci à @mathmandan pour avoir rasé 5 octets!
C'était une expérience et une expérience aussi. Toutes les suggestions de golf sont les bienvenues, car c'est assez long. J'ai fait de mon mieux pour réutiliser du texte, mais c'était assez difficile.
Techniquement, ce programme devrait sortir avec Python 3 (et je pourrais changer cela si je ne répondais pas aux spécifications - mais dans l'exemple, la sortie Python / C Python
était listée).
aa=" ni nettirw t'nsaw margorp sihT\"\""
v="><>!" #v "><>"r~/
a=", it was built for "+v#\a
print(aa[-3::-1]+"Pytho" +"n"+a)
# .4b;!?lor"!nohtyP r"~/
Essayez-le sur un interprète en ligne> <> et un Python 3 (l' interpréteur > <> nécessite que vous saisissiez le code manuellement).
Résultats
This program wasn't written in ><>, it was built for Python!
dans> <> et
This program wasn't written in Python, it was built for ><>!
en Python.
Explication (Python)
Pour le côté Python, c'est assez simple. Voici le code qui nous tient à coeur (essentiellement le code sans commentaires, qui sont désignés par un code #
Python). Notez qu'en Python, \
un caractère d'échappement est utilisé lorsqu'il est utilisé dans des chaînes. Il est donc \"
évalué "
dans la chaîne.
aa=" ni nettirw t'nsaw margorp sihT\"\""
v="><>!"
a=", it was built for "+v
print(aa[-3::-1]+"Pytho" +"n"+a)
Ce qui nous importe le plus ici, ce sont les opérations effectuées sur la variable aa
:
aa[-3::-1]: reverses the string and chops off the quotation marks (thanks to @mathmandan)
La déclaration d'impression est donc évaluée à
"This program wasn't written in " + "Pytho" + "n" + ", it was built for ><>!"
Explication (> <>)
Nous arrivons maintenant à la partie la plus difficile. Encore une fois, voici le code avec les bits inutiles supprimés.
aa=" ni nettirw t'nsaw margorp sihT\"\
v "><>"r~/
a=", it was built for "+v \a
.4b;!?lor"!nohtyP r"~/
Ligne 1:
aa=" ni nettirw t'nsaw margorp sihT\"\
aa= pushes 1 onto the stack (evaluates 10==10, basically)
" ni ... \" pushes the first part plus a \ onto the stack.
\ deflects the pointer downwards
La pile en ce moment (si imprimée): \This program wasn't written in
Ligne 2:
Notez que la ligne 2 commence par le en /
raison de la position du pointeur de la ligne 1 et se déplace de droite à gauche.
v "><>"r~/
/ deflects the pointer leftwards
~r pops the / off the stack and then reverses it
"><>" pushes ><> onto the stack
v deflects the pointer downwards
La pile en ce moment: ><> ni nettirw t'nsaw margorp sihT
Ligne 3:
Comme la ligne précédente, celle-ci commence à la \
, qui est l'endroit où la ligne 2 envoie le pointeur. Notez que parce que le pointeur entoure la ligne quand il atteint la première, a
je vais écrire mon explication dans l’ordre dans lequel le pointeur va (et donc ce qui est exécuté)
a=", it was built for "+v \a
\aa= deflect and push 1 onto the stack
", i ... " push the string onto the stack
+v sum the last two values pushed and deflect
La pile en ce moment ( x
est le caractère formé par l'ajout de "r" et d'un espace. - ce n'est pas le caractère réel, juste un espace réservé de moi):
xof tliub saw ti ,><> ni nettirw t'nsaw margorp sihT
Ligne 4:
Le pointeur continue simplement vers le bas et cette ligne ne mérite aucune explication supplémentaire.
Ligne 5:
À partir /
et à gauche.
.4b;!?lor"!nohtyP r"~/
~"r Python!" pops x off and adds back r and a space
r reverses the stack
o pops and prints a character
l?!; pushes the length of the stack and stops if it's 0
b4. pushes 11 then 4 then moves to that location (where o is)
La pile en ce moment (la sortie inversée):
!nohtyP rof tliub saw ti ,><> ni nettirw t'nsaw margorp sihT
Et ça devrait être ça pour l'explication. Faites-moi savoir s'il y a une incohérence entre l'explication / le code ou si j'ai fait quelque chose de mal. J'ai encore joué au code alors que j'étais en train d'écrire l'explication afin de pouvoir mélanger des morceaux d'ancien et de nouveau code.