Python 3 / > <> , 177 173 172 167 Bytes
¡Gracias a @mathmandan por eliminar 5 bytes!
Bueno, esta fue una experiencia, y también una prueba. Cualquier sugerencia de golf es bienvenida, ya que esto es bastante largo. Hice todo lo posible para reutilizar el texto, pero fue bastante difícil.
Técnicamente, sería Python 3 el que debería generar este programa (y podría cambiarlo si no cumpliera con las especificaciones, pero en el ejemplo Python
se enumeró la salida de Python / C ).
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"~/
Pruébelo en un intérprete en línea> <> y en un intérprete de Python 3 (el intérprete > <> requiere que ingrese el código manualmente)
Devoluciones
This program wasn't written in ><>, it was built for Python!
en> <> y
This program wasn't written in Python, it was built for ><>!
en Python
Explicación (Python)
Para el lado de Python, es bastante simple. Aquí está el código que nos interesa (básicamente el código sin comentarios, que se denota con un #
en Python). Tenga en cuenta que en Python \
es un carácter de escape cuando se usa en cadenas, por lo que se \"
evalúa "
en la cadena.
aa=" ni nettirw t'nsaw margorp sihT\"\""
v="><>!"
a=", it was built for "+v
print(aa[-3::-1]+"Pytho" +"n"+a)
Lo que más nos importa aquí son las operaciones realizadas en la variable aa
:
aa[-3::-1]: reverses the string and chops off the quotation marks (thanks to @mathmandan)
La declaración impresa se evalúa así
"This program wasn't written in " + "Pytho" + "n" + ", it was built for ><>!"
Explicación (> <>)
Ahora llegamos a la parte más difícil. Una vez más, aquí está el código con los bits innecesarios eliminados.
aa=" ni nettirw t'nsaw margorp sihT\"\
v "><>"r~/
a=", it was built for "+v \a
.4b;!?lor"!nohtyP r"~/
Línea 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 pila en este momento (si está impresa): \This program wasn't written in
Línea 2:
Tenga en cuenta que la línea 2 comienza en la /
posición del puntero desde la línea 1 y se mueve de derecha a izquierda.
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 pila en este momento: ><> ni nettirw t'nsaw margorp sihT
Línea 3:
Al igual que la línea anterior, esta comienza en \
, que es donde la línea 2 envía el puntero. Tenga en cuenta que debido a que el puntero se ajusta alrededor de la línea cuando llega al primero a
, escribiré mi explicación en orden de dónde va el puntero (y, por lo tanto, qué se ejecuta)
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 pila en este momento ( x
es el personaje formado por la adición de "r" y un espacio. No es el personaje real, solo un marcador de posición de mi parte):
xof tliub saw ti ,><> ni nettirw t'nsaw margorp sihT
Línea 4:
El puntero simplemente continúa hacia abajo, por lo que esta línea no garantiza más explicaciones.
Línea 5:
Comenzando en /
y yendo hacia la izquierda.
.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 pila en este momento (la salida se invirtió):
!nohtyP rof tliub saw ti ,><> ni nettirw t'nsaw margorp sihT
Y eso debería ser todo por la explicación. Avíseme si hay alguna inconsistencia entre la explicación / código o si hice algo mal; Aprendí un poco más mi código mientras estaba escribiendo la explicación para poder mezclar fragmentos de código antiguo y nuevo.