20020xx##;;11++::''ee44**``kk@@::..;;
在线尝试!
说明
在Befunge-98中制作经过防辐射处理的代码还不错,因为您可以使用手动设置“增量”(即指令指针的步长)x
。因此,如果将delta设置为(2,0)
,从那时起,将跳过所有其他字符,我们可以简单地将所有命令加倍。棘手的事情是以2 0
可靠的方式进入堆栈的顶部。实际上0 2 0
,我们需要其余的程序才能正常工作,但是我们将免费提供该程序。这是我们的操作方式:
20020xx
请注意,每个数字都按自己,所以在完整程序中,会有一个开始2 0
,我们将忽略它。
因此,从程序中删除第一个或第二个字符是无关紧要的,因为我们还是不会使用这些数字。同样,删除第三个字符与删除第二个字符相同,因此我们也不必为此担心。
让我们考虑一下其他两种情况。删除第四个字符:
2000xx
注意,增量设置为(0,0)
。但这根本不会移动指令指针,因此x
立即再次执行相同的指令,这一次将弹出(2,0)
并且一切都很好(在堆栈底部有隐含的零,以供以后使用)。
让我们删除第五个字符:
2002xx
现在,增量设置为(0,2)
。但是,仍然没有水平移动,因此IP立即回绕x
并再次设置正确的增量。
从这一点开始,我们基本上可以忽略字符重复以及最初的部分,因为它将始终被跳过:
...#;1+:'e4*`k@:.;
这;
是一种注释命令,它会跳过所有内容,直到;
遇到下一个命令为止。但是,我们跳过了第一个;
,#
因此;
从该点开始将仅执行之间的部分。
1+ Increment the top of the stack.
: Duplicate it.
'e Push 101.
4* Multiply by 4 to get 404.
` Greater-than check. Pushes 1 once the top
reaches 405, otherwise 0.
k@ Terminate the program that many times.
:. Print a copy of the top of the stack (and a space).