余数解题分析

精华修改于2023/03/187121 浏览综合
TapTap
余数这关的四个士兵属于同index单位,点击刷新后,四个士兵的代码就会同步。
首先要弄清游戏中一帧的概念以及多个单位的代码是如何运行的。
1.一帧分为检测与执行两个部分,一秒内游戏运行60帧(一帧0.017秒);
2.检测过程中,代码按从上往下的顺序检测,从第一个友方单位的第一行代码检测到最后一个单位的最后一行代码(制作关卡时作者会确定单位顺序);
3. 检测每行代码时,信号指令的开关会瞬间被改变(立刻被执行),直接影响到后面的指令与单位,(所以可以利用信号组写计时器或者计数器);所有条件满足的位移命令和开火命令会被不断读取。
4.检测完成后,各个单位执行最后读取到的开火和位移命令,既执行优先级最高的命令。
关于上面第三条前面单位影响到后一个单位(尤其是信号的影响),举例 https://www.taptap.com/post/40492858
本关中,我们期望的是1号单位最后行动,其余三个单位依次自杀。我们首先要做的就是保证在剩余不同数量友方单位时每个单位在每一帧都执行相同代码。
所以要找到一个数,对剩余数量(1,2,3,4)取余后为0,这个数必然是1,2,3,4的公倍数,比如12(当然你非要用24也可以)。
然后构造一个轮次为12的计时器,并让其中一轮前往A(注意用到检测信号关),这样就能让四个士兵在每一帧中都执行相同的代码(执行前往A或保持站立)。
TapTap
解法如图,第一行为1开。
如果看不懂计时器,请前往以下链接学习。https://www.taptap.com/topic/4830721
解释一下第六行,为什么是信号432(也就是计时到十进制的7)的时候前往A。
假设,四个单位都向A点走一帧就会被狙击打死。
那么当我让它们计时到信号432开也就是7的时候前往A,则
1 2 3 4 5 6 7 8 9 10 11 12(计时器12个轮次)
1 2 3 4, 1 2 (3) 4, 1 2 4, 1(每轮对应的单位)
2 4, 1 2 4, 1 (2) 4, 1 4, 1 4,
1 4, 1 4, 1 4,(1) 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4,(4),
其中括号里面数字代表某号单位死亡,逗号分割了每帧。
死亡顺序为3-2-1-4。
其中,3号死在第2帧,2号死在第6帧,1号死在第12帧,4号第23帧前往A。(注意一帧的概念:从第一个单位到最后一个单位的检测过程与指令检测完毕的执行过程,这两步合起来就是一帧)
那么,我们可以发现,如果让第一个士兵走3x+1帧死亡,第二个士兵2y+1帧死亡,(x与y为大于等于0的正整数),死亡顺序必然是3-2-1-4。
如果是各单位走2帧死亡,则
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4, 1 2 [3] 4, 1 2 (3) 4,
1 2 4, 1 2 4,[1] 2 4, (1) 2 4,
2 4, 2 4, 2 4,[2] 4, (2) 4, 4, 4
4, 4, 4, 4, 4, 4,[4],(4),
其中[]表示某单位开始行走,()表示某单位死亡。
死亡顺序为3-1-2-4。
————————
而本关中,我们期望的顺序是1号最后一个前往A。
不同于上面说的特定帧数死亡,本关你并不知道每个单位前往A到死亡会经过几帧,但是,每个单位死亡的帧数一定是固定的,因为各个单位到A点的距离是固定的。
所以只要尝试让2号先死(信号3),3号先死(信号32),4号先死(信号4),那么必然能找到一个解(注意用到检测信号关)。
TapTap
经过尝试,上图为信号32(十进制3)让3号先死时,死亡顺序是3241,这是一个解。
反推可以得到3号经过3x+1帧后死亡,2号经过2y+2帧后死亡(x与y为大于等于0的正整数)。
由于初始单位有4个,那么再把32(十进制3)这个解加4x帧再启动,也就是信号432(十进制的7),还有信号532(十进制11)。
这两个都是可以的,如下:
TapTap
TapTap
(上图第六行省略了检测信号关)
最后一步:开火点。
这关最后一个难点在于何时开火,因为变态作者把时间调的很极限,这个没办法,只能试,所以得到最终解,第一行为信号1开。
TapTap
正解之一(如上图),应该还有其他解,不过开火点懒得调试了。
附一个信号与十进制对照表
TapTap
59
38
33