蟒3 / > <> ,177 173 172 167个字节
感谢@mathmandan削减了5个字节!
好吧,这是一种体验,也是一种尝试。任何高尔夫建议都欢迎,因为这很长。我尽力重用文本,但这非常困难。
从技术上讲,该程序应该输出的是Python 3(如果我不符合规范,可以更改它-但在示例Python
中列出了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"~/
在在线> <>解释器和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 \
中,当在字符串中使用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)
因此,打印语句的计算结果为
"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行:
请注意,/
由于指针从第1 行开始的位置,第2行开始于,并从右向左移动。
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
那应该是解释了。让我知道说明/代码之间是否存在不一致或是否做错了任何事情;在编写说明的过程中,我进一步研究了代码,因此我可能会混用旧的和新的代码。