Python 3 / > <> , 177 173 172 167 Bytes
Obrigado a @mathmandan por remover 5 bytes de distância!
Bem, essa foi uma experiência e também uma tentativa. Todas as sugestões de golfe são bem-vindas, pois isso é bastante longo. Eu tentei o meu melhor para reutilizar o texto, mas foi bastante difícil.
Tecnicamente, seria o Python 3 que esse programa deveria produzir (e eu poderia mudar isso se não atender às especificações - mas no exemplo a saída do Python / C Python
foi listada).
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"~/
Experimente em um intérprete on - line> <> e um intérprete Python 3 (o intérprete > <> requer que você insira o código manualmente)
Devoluções
This program wasn't written in ><>, it was built for Python!
em> <> e
This program wasn't written in Python, it was built for ><>!
em Python.
Explicação (Python)
Para o lado Python, é bem simples. Aqui está o código com o qual nos preocupamos (basicamente o código sem comentários, que é indicado por um #
em Python). Observe que no Python \
é um caractere de escape quando usado em strings, portanto, é \"
avaliado como "
na string.
aa=" ni nettirw t'nsaw margorp sihT\"\""
v="><>!"
a=", it was built for "+v
print(aa[-3::-1]+"Pytho" +"n"+a)
O que mais nos interessa aqui são as operações executadas na variável aa
:
aa[-3::-1]: reverses the string and chops off the quotation marks (thanks to @mathmandan)
A declaração de impressão é avaliada como
"This program wasn't written in " + "Pytho" + "n" + ", it was built for ><>!"
Explicação (> <>)
Agora chegamos à parte mais difícil. Mais uma vez, aqui está o código com os bits desnecessários removidos.
aa=" ni nettirw t'nsaw margorp sihT\"\
v "><>"r~/
a=", it was built for "+v \a
.4b;!?lor"!nohtyP r"~/
Linha 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
A pilha agora (se impressa): \This program wasn't written in
Linha 2:
Observe que a linha 2 começa com a /
posição do ponteiro da linha 1 e se move da direita para a esquerda.
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
A pilha agora: ><> ni nettirw t'nsaw margorp sihT
Linha 3:
Como a linha anterior, esta começa na \
, onde é a linha 2 que envia o ponteiro. Observe que, como o ponteiro passa pela linha quando atinge o primeiro, a
escreverei minha explicação na ordem em que o ponteiro vai (e, portanto, o que é executado)
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
A pilha agora ( x
é o personagem formado pela adição de "r" e um espaço. - não é o personagem real, apenas um espaço reservado meu):
xof tliub saw ti ,><> ni nettirw t'nsaw margorp sihT
Linha 4:
O ponteiro simplesmente continua para baixo, portanto essa linha não garante mais explicações.
Linha 5:
Começando /
e indo para a esquerda.
.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)
A pilha agora (a saída invertida):
!nohtyP rof tliub saw ti ,><> ni nettirw t'nsaw margorp sihT
E deve ser isso para a explicação. Deixe-me saber se há alguma inconsistência entre a explicação / código ou se fiz algo errado; Joguei meu código um pouco mais enquanto escrevia a explicação, para que eu pudesse misturar pedaços de código antigo e novo.