题解作者:V1me
出题人、验题人、文案设计等:见 Hackergame 2021 幕后工作人员。
-
题目分类:general
-
题目分值:350
一台陈旧的机械计算机正在轰隆隆地发出巨响,数据被刻在一块块石板上,密密麻麻的石板排成了巨大的三维矩阵。石块在被未知的力量高速推动,一次次地执行着指令代码中的循环,在三维矩阵中留下一条条长短不一的轨迹。
「这看起来是骇客文明制造的一台计算器,用于执行一些简单的数学运算。」
「它在执行死循环。风雨的侵蚀已经让石板上的指令无法读取了。」
「计算器应该没有多复杂。我来试试把指令填充好,让计算器程序重新运行起来,然后我们一起欣赏这远古骇客文明的辉煌。」
你可以 nc 202.38.93.111 10104
来与远程交互, 或者点击下面的 "打开/下载题目" 按钮通过网页终端与远程交互。
如果你不知道
nc
是什么,或者在使用上面的命令时遇到了困难,可以参考我们编写的 萌新入门手册:如何使用 nc/ncat?
题目的主要考点是 esolang 的理解和编写。相对于 brainfxxk 语言,funges 是一类相对小众的语言。题目名字和附件文件名都暗示这是一个魔改的 funge,为了保证趣味性,出题人并没有用原版的 trefunge 来出题,而是魔改了一下 befunge,强制改成三维的同时保证图灵完备性(删去了 bridge 和区域内存操作,增加了栈中任意位置的 swap)。
你需要完成两个角色,一个是 调度员 "dispatcher",一个是 工人 "worker"。调度员负责处理输入,并且分配给合适的工人(类似 switch case)。工人们负责完成各个运算的逻辑。之后将这两部分组合起来,就是这个题的解了。
这个题其实二维就完全可解了,三维只是一个噱头。
PS: 存在一个 befunge 解释器。如果你只是在二维完成这个题目的话,这个或许可以帮助你调试,你只需要魔改一下 js 代码即可。
PPS: 不愿透漏姓名的验题人在验题时所改编使用的可视化半调试微型在线集成开发环境 visual-befun3d-interpreter。
感谢 Cirn09 同学帮忙完成的 exp。
v >:v >:v >:v >:v >:v >$.@
>~"0"-12\:"*"-| >"+"-| >"<"-| >"^"-| >"x"-| >"|"-|
>0~"0"->~:| $ $ $ $ $ $
> ^ >$.@ * + > v
^ < <
^ v <
^ v >1-12\2*12\v v <
^ >:| v <
^ ^ < >12\:13\^
^ $< >013\12\>1-:|
^ >* v$
^ |:\12<<<
^ $<$.@
v <<<<<<<<<<<
v \ 3 1 <
0 v +1\12<
>1>12\:1>12\2/:|
v$\12< >$13\|
|`\31:\31:\13< v >1-12\2*12\v
^ v $< > > >:|
^ < >1-12\2*12\v
>1-:112\^ >$v >12\ >:|
>012\23\34\>:| 1 ^ <
^ $$$ <v << < : >$v
>:14\:25\12\/2%15\:26\13\23\/2%+2%| 2
@ 5
^ < < \41+\<
v <
v \ 3 1 <
0 v +1\12<
> 1>12\:1>12\2/:|
v$\12< >$13\|
|`\31:\31:\13< v >1-12\2*12\v
v $< > > >:|
^ <
>$v >1-12\2*12\v
>1-:112\^ >12\ >:|
>>>>>>012\23\34\>:| 1 ^ <
^ $$$ <v << < : >$v
>:14\:25\12\/2%15\:26\13\23\/2%+ | 2
@ 5
^ < < \41+\<