ab*1'3:*2+*0pnd3*:::::::::::::::1'3:*3+*0p1'3:*5+*0p1'3:*d+*0p1'3:*f+*0p1'3:*fa++*0p1'3:*fd++*0p1'4'3*f-*0p1'4'3*7-*0p1'4'3*5-*0p6:*:*4-1p6:*:*4+1p6:*:*8+1p6:*:*a+1p6:*:*8+2p6:*:*f1++2p6:*:*f3++2pn75*1-:1'3:*4+*0p6:*:*f2++2pnaa*:::::::::::::::::1'3:*6+*0p1'3:*7+*0p1'3:*f1++*0p1'3:*f2++*0p1'3:*fe++*0p1'3:*ff++*0p1'4'3*e-*0p1'4'3*d-*0p1'4'3*4-*0p1'4'3*3-*0p6:*:*3-1p6:*:*2-1p6:*:*b+1p6:*:*c+1p6:*:*9+2p6:*:*a+2p6:*:*f4++2p6:*:*f5++2pn67*::::::::::1'3:*8+*0p1'3:*a+*0p1'3:*f4++*0p1'3:*f5++*0p1'4'3*f-5-*0p1'4'3*c-*0p1'4'3*2-*0p6:*:*1-1p6:*:*d+1p6:*:*b+2p6:*:*f6++2pna5*::1'3:*9+*0p1'3:*f3++*0p6:*:*1pn68*:::::1'3:*b+*0p1'3:*f8++*0p1'4'3*f-2-*0p1'4'3*9-*0p1'4'3*1+*0p6:*:*f7++2pne8*:::::::1'3:*c+*0p1'3:*f9++*0p1'4'3*f-1-*0p1'4'3*8-*0p1'4'3*2+*0p6:*:*f2++1p6:*:*f+2p6:*:*f8++2pnf4*:1'3:*e+*0p1'4'3*3+*2pn77*::::1'3:*f6++*0p1'4'3*f-4-*0p6:*:*f1++1p6:*:*c+2p6:*:*e+2pnb4*1-::1'3:*f7++*0p6:*:*f+1p6:*:*d+2pnf4*1-::1'3:*fb++*0p6:*:*7+2p1'3:*1+*2pnf4*2-1'3:*fc++*0pn95*:::1'4'3*f-3-*0p1'4'3*a-*0p1'4'3**0p6:*:*1+1pn87*1'4'3*b-*0pnac*2-:1'4'3*6-*0p1'4'3*3+*0pnf4*3-1'4'3*1-*0pn88*2-6:*:*5-1pnc9*1-6:*:*2+1pnb4*:6:*:*3+1p6:*:*6+1pn88*6:*:*9+1pnd4*1-6:*:*e+1pnc8*2-:1'3:**1p1'3:**2pnd7*2+6:*:*4+2pn75*6:*:*6+2pn>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ab*1'3:*2+*0pnd3*:::::::::::::::1'3:*3+*0p1'3:*5+*0p1'3:*d+*0p1'3:*f+*0p1'3:*fa++*0p1'3:*fd++*0p1'4'3*f-*0p1'4'3*7-*0p1'4'3*5-*0p6:*:*4-1p6:*:*4+1p6:*:*8+1p6:*:*a+1p6:*:*8+2p6:*:*f1++2p6:*:*f3++2pn75*1-:1'3:*4+*0p6:*:*f2++2pnaa*:::::::::::::::::1'3:*6+*0p1'3:*7+*0p1'3:*f1++*0p1'3:*f2++*0p1'3:*fe++*0p1'3:*ff++*0p1'4'3*e-*0p1'4'3*d-*0p1'4'3*4-*0p1'4'3*3-*0p6:*:*3-1p6:*:*2-1p6:*:*b+1p6:*:*c+1p6:*:*9+2p6:*:*a+2p6:*:*f4++2p6:*:*f5++2pn67*::::::::::1'3:*8+*0p1'3:*a+*0p1'3:*f4++*0p1'3:*f5++*0p1'4'3*f-5-*0p1'4'3*c-*0p1'4'3*2-*0p6:*:*1-1p6:*:*d+1p6:*:*b+2p6:*:*f6++2pna5*::1'3:*9+*0p1'3:*f3++*0p6:*:*1pn68*:::::1'3:*b+*0p1'3:*f8++*0p1'4'3*f-2-*0p1'4'3*9-*0p1'4'3*1+*0p6:*:*f7++2pne8*:::::::1'3:*c+*0p1'3:*f9++*0p1'4'3*f-1-*0p1'4'3*8-*0p1'4'3*2+*0p6:*:*f2++1p6:*:*f+2p6:*:*f8++2pnf4*:1'3:*e+*0p1'4'3*3+*2pn77*::::1'3:*f6++*0p1'4'3*f-4-*0p6:*:*f1++1p6:*:*c+2p6:*:*e+2pnb4*1-::1'3:*f7++*0p6:*:*f+1p6:*:*d+2pnf4*1-::1'3:*fb++*0p6:*:*7+2p1'3:*1+*2pnf4*2-1'3:*fc++*0pn95*:::1'4'3*f-3-*0p1'4'3*a-*0p1'4'3**0p6:*:*1+1pn87*1'4'3*b-*0pnac*2-:1'4'3*6-*0p1'4'3*3+*0pnf4*3-1'4'3*1-*0pn88*2-6:*:*5-1pnc9*1-6:*:*2+1pnb4*:6:*:*3+1p6:*:*6+1pn88*6:*:*9+1pnd4*1-6:*:*e+1pnc8*2-:1'3:**1p1'3:**2pnd7*2+6:*:*4+2pn75*6:*:*6+2pn>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
在线尝试!
这使这真是一场大麻烦。
工作原理:
该程序是一堆put语句,这些语句将一个程序B自身组装在一起,然后打印两次移位的源字节的一半。
该程序实际上是一个1300字节程序的2个副本,因此可以确保整个1300字节程序始终作为整体运行。
更好的解释:
每Befunge-98喹需要包含符号,一个@
或q
和,
问题:这些符号都不是一个很好的起点,因为特别是具有@
和q
立即终止程序。
解决方案:摆脱源代码中的那些字符
问题:如何?
解决方案:使用p
(放置)命令将源代码修改为包括所需的字符,这些字符将打印源代码的内容,并偏移一个字节,而不使用g
作弊的命令。
问题:(请问这些结束什么时候结束)
put命令会弹出3个n x y
确定字符,x坐标,y坐标的值,但是当将这些值的初始化分为两部分时,它可能会在开始的源代码中写入不良字符,从而使其无效奎因
解决方案:(我保证的最后一个)
使用源代码的2个副本,后者是“正确的”副本,这不小心解决了另一个问题,即将put语句(p命令+常量初始化程序)分成两半会不会执行,这是通过每个语句具有2个副本来解决的。这需要工作的最后一件事是如何使整个源代码减半?
答:
这是为什么一个字符串的两个副本字节移位==的一个字节移位的字符串两个副本的视觉证明。这意味着我们可以拿一半的代码,对它进行字节移位,然后打印两次(或者拿一半的代码,对它进行字节移位,打印,重复[这就是实际发生的事情])
如何实现:假设源为0123456789abcdef
Befunge伪代码:
0123456789abcv;;"123456789abcdef" < go this way <--
>PS'0, repeat 2x ^
PS表示打印堆栈(不是真实的指令)。我们使用反向将一半的源代码压入""
堆栈,然后打印堆栈,然后获取('
命令)0
移到前面的第一个字符'
并最后打印导致字节移位的字符,然后重复循环再次打印第二份。处理源代码中的符号是一种技术,如果我们在执行源代码时编写它,可能会造成麻烦。我通过添加更多外部处理它的put语句来避免这种情况。
这使代码看起来像这样:
说明:
绿色突出显示:负责将字符添加到源代码中的代码
灰色字母(抱歉,可见性较差):绿色代码添加了代码
红色突出显示:将源代码后半部分的第一个字符移到蓝色区域的代码。
蓝色突出显示:请参见红色突出显示
橙色来突出显示:该代码可确保在写入2字节移位副本后通过将@
(终止)命令放入黄色区域来终止我们的代码。
希望箭头应该使代码流向更清晰。
这里谈到的最后艰难的部分:
在哪里婴儿来自源代码?
简短的答案:C#Magic
长的答案:100多个由C#代码手工编写的Befunge代码片段。我手动手工编写了大约100个常量初始化程序(一段将某些数字压入堆栈的befunge代码),然后使用一个自定义C#程序将其编译为1300字节的Befunge输出,然后我将其复制粘贴两次并进行最终程序。
你还在吗?非常感谢您的阅读!(或者至少滚动到结尾),
我希望我的坏笑话很有趣,而且不要烦人。
注意:此代码中的put语句不会创建会作弊的g命令。
编辑:我已经使用开发人员工具在TIO中使用以下Javascript代码验证了代码
setInterval(()=>{document.getElementById("code").value =
document.getElementById("output").value;
document.getElementById("run").click();}, 2000);