^
.
+
8
f
0
o
a
o
~
:
?
~
:
?
:
-
*
4
8
:
^
^
}
*
3
d
'
在线尝试!或验证所有突变。
原始程序的工作方式(已过时)
解释器从单元格(0,0)开始。^
将方向设置为向上,因此指令指针(IP)环绕到单元格( 0,20 )。
'
激活字符串模式:直到'
遇到下一个,IP下的所有字符都被压入堆栈。'
环绕后再次发现相同的内容,因此我们推
d3*}^^:84*=?~oao0f.^
IP落在(0,19)处,仍在向上。执行d3*}
推13 = 0xd中,然后3,乘两个值(39 / 单引号),然后旋转堆叠到右侧。这使堆栈如下。
'd3*}^^:84*=?~oao0f.^
接下来的两个指令(^
)此时不执行任何操作。
:84*=
复制堆栈顶部,按8和4,将它们相乘(32 / 空格),然后测试复制的字符与空格是否相等。对于未更改的程序,它将始终推0。
?
如果栈顶为假,则跳过下一条指令。对于原始程序,它始终是,因此~
总是被跳过。
oao
弹出并打印堆栈顶部,按10 / 换行,然后弹出并打印linefeed。
最后0f.
跳转到单元格( 0,15 )(最底部的^
),从堆栈上的下一个字符开始。
堆栈为空后,将打印整个源代码。:
将失败,程序退出。
变异程序的工作方式(过时)
复制任何非换行符只会使程序水平扩展。由于程序是垂直执行的,因此这些额外的指令将永远不会执行。
所述bottomost之前复制任何换行符^
将转移细胞(0,14)和(0,15)到(0,15)和(0,16) 。0f.
现在将跳转到最底端的单元格^
(也是)之前^
,因此程序不受移位的影响。
最后,任何重复的换行符也会改变字符串。短行用空格填充,因此将在换行符的位置插入32 / 空格。84*=
将按1表示空格,因此?
不要跳过下一条指令。在这种情况下,~
弹出并放弃space,因此以下命令o
将在空格上方打印字符。
0
而00
在CJam两个输出0
。