Python 3 / > <> , 177 173 172 167 byte
Grazie a @mathmandan per aver rasato 5 byte!
Bene, questa è stata un'esperienza, e anche una prova. Qualsiasi suggerimento sul golf è il benvenuto, poiché è piuttosto lungo. Ho fatto del mio meglio per riutilizzare il testo, ma è stato abbastanza difficile.
Tecnicamente, sarebbe Python 3 che questo programma avrebbe prodotto (e potrei cambiarlo se non avessi soddisfatto le specifiche - ma nell'esempio è Python
stato elencato l' output di 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"~/
Provalo su un interprete> <> online e un interprete Python 3 (l' interprete > <> richiede di inserire il codice manualmente)
ritorna
This program wasn't written in ><>, it was built for Python!
in> <> e
This program wasn't written in Python, it was built for ><>!
in Python.
Spiegazione (Python)
Per il lato Python delle cose, è piuttosto semplice. Ecco il codice a cui teniamo (fondamentalmente il codice senza commenti, che sono indicati da a #
in Python). Nota che in Python \
è un carattere di escape quando usato nelle stringhe, quindi \"
valuta "
nella stringa.
aa=" ni nettirw t'nsaw margorp sihT\"\""
v="><>!"
a=", it was built for "+v
print(aa[-3::-1]+"Pytho" +"n"+a)
Ciò che ci interessa di più qui sono le operazioni eseguite sulla variabile aa
:
aa[-3::-1]: reverses the string and chops off the quotation marks (thanks to @mathmandan)
L'istruzione print quindi valuta
"This program wasn't written in " + "Pytho" + "n" + ", it was built for ><>!"
Spiegazione (> <>)
Ora arriviamo alla parte più difficile. Ancora una volta, ecco il codice con i bit non necessari rimossi.
aa=" ni nettirw t'nsaw margorp sihT\"\
v "><>"r~/
a=", it was built for "+v \a
.4b;!?lor"!nohtyP r"~/
Linea 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 in questo momento (se stampata): \This program wasn't written in
Linea 2:
Nota che la linea 2 inizia a /
causa della posizione del puntatore dalla linea 1 e si sposta da destra a sinistra.
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 in questo momento: ><> ni nettirw t'nsaw margorp sihT
Linea 3:
Come la riga precedente, questa inizia da \
, che è dove la riga 2 invia il puntatore. Si noti che poiché il puntatore si avvolge intorno alla linea quando raggiunge il primo a
, scriverò la mia spiegazione in ordine di dove va il puntatore (e quindi cosa viene eseguito)
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 in questo momento ( x
è il personaggio formato dall'aggiunta di "r" e uno spazio. - Non è il personaggio reale, solo un mio segnaposto):
xof tliub saw ti ,><> ni nettirw t'nsaw margorp sihT
Linea 4:
Il puntatore continua semplicemente verso il basso, quindi questa linea non garantisce ulteriori spiegazioni.
Linea 5:
A partire da /
e andando verso sinistra.
.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)
Lo stack in questo momento (l'output è invertito):
!nohtyP rof tliub saw ti ,><> ni nettirw t'nsaw margorp sihT
E quello dovrebbe essere per la spiegazione. Fammi sapere se c'è qualche incoerenza tra la spiegazione / codice o se ho fatto qualcosa di sbagliato; Ho analizzato il mio codice un po 'di più mentre ero nel mezzo della stesura della spiegazione, quindi avrei potuto mescolare frammenti di codice vecchio e nuovo.