Pythonの3 / > <> 、177 173 172 167のバイト
5バイトを削る@mathmandanに感謝します!
まあ、これは経験であり、試練でもありました。これはかなり長いので、ゴルフの提案は大歓迎です。テキストを再利用するために最善を尽くしましたが、それは非常に困難でした。
技術的には、このプログラムが出力するのはPython 3です(仕様に合わなかった場合は変更できますが、例ではPython / C出力Python
がリストされています)。
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"~/
オンラインの<>インタープリターおよびPython 3インタープリターで試してみてください(> <>インタープリターでは、コードを手動で入力する必要があります)
返却値
This program wasn't written in ><>, it was built for Python!
> <>および
This program wasn't written in Python, it was built for ><>!
Pythonで。
説明(Python)
物事のPython側については、非常に簡単です。私たちが気にするコードは次のとおりです(基本的にコメントのないコード。Pythonではa #
で示されます)。Python \
では文字列で使用される場合、エスケープ文字であるため、文字列で\"
評価されることに注意してください"
。
aa=" ni nettirw t'nsaw margorp sihT\"\""
v="><>!"
a=", it was built for "+v
print(aa[-3::-1]+"Pytho" +"n"+a)
ここで最も重要なのは、変数に対して実行される操作ですaa
。
aa[-3::-1]: reverses the string and chops off the quotation marks (thanks to @mathmandan)
したがって、printステートメントは次のように評価されます。
"This program wasn't written in " + "Pytho" + "n" + ", it was built for ><>!"
説明(> <>)
今、私たちはより難しい部分に着きます。もう一度、不要なビットを削除したコードを示します。
aa=" ni nettirw t'nsaw margorp sihT\"\
v "><>"r~/
a=", it was built for "+v \a
.4b;!?lor"!nohtyP r"~/
ライン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
現在のスタック(印刷されている場合): \This program wasn't written in
2行目:
行2は、/
行1からのポインターの位置のためにから始まり、右から左に移動することに注意してください。
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
現在のスタック: ><> ni nettirw t'nsaw margorp sihT
3行目:
前の行と同様に、この行はで始まり、\
2行目でポインターが送信されます。ポインタが最初a
に到達すると行を折り返すので、ポインタがどこに行くのか(したがって実行されるもの)の順に説明を書くことに注意してください。
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
現在のスタック(x
「r」とスペースの追加によって形成される文字です。実際の文字ではなく、私からの単なるプレースホルダーです):
xof tliub saw ti ,><> ni nettirw t'nsaw margorp sihT
行4:
ポインターは下方向に続くだけなので、この行はそれ以上の説明を必要としません。
行5:
で始まり、/
左に進みます。
.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)
現在のスタック(出力が逆転):
!nohtyP rof tliub saw ti ,><> ni nettirw t'nsaw margorp sihT
そして、それは説明のためであるはずです。説明/コードに矛盾がある場合、または何か間違ったことをした場合はお知らせください。説明を書いている最中にもう少しコードを掘り下げたので、古いコードと新しいコードが少し混ざっていたかもしれません。