余數(shù)這關(guān)的四個(gè)士兵屬于同index單位,點(diǎn)擊刷新后,四個(gè)士兵的代碼就會同步。
首先要弄清多個(gè)單位的代碼是如何運(yùn)行的。
1.代碼是順序檢測,并且不斷循環(huán)的;
2.一個(gè)循環(huán)指的是從第一個(gè)單位的第一行代碼,到最后一個(gè)單位的最后一行代碼;
3. 檢測過程的一個(gè)完整的循環(huán)中,信號指令的開關(guān)會瞬間被改變(立刻被執(zhí)行),直接影響到后面的指令與單位,(所以你可以利用信號組寫計(jì)時(shí)器或者計(jì)數(shù)器);而有沖突的位移命令和開火命令則是下面的會覆蓋上面,并且不是立刻執(zhí)行的。
4.檢測完成后,各個(gè)單位執(zhí)行優(yōu)先級最高的開火和位移命令。
5.也就是說,異常的代碼分為檢測和執(zhí)行兩個(gè)部分,一輪檢測加上執(zhí)行,就是游戲里面的一幀。
關(guān)于上面第三條前面單位影響到后一個(gè)單位(尤其是信號的影響)
明白這些后就可能有這樣的思考了。
首先,把4個(gè)單位分為4組,即4組運(yùn)行完就是1幀。
上面帖子里分析到位,第一組是站立,后面三組前往A,4%4=0,余數(shù)為0
但是當(dāng)有單位死亡時(shí),4%3=1,余數(shù)為1。循環(huán)被打破,此時(shí)每個(gè)單位都有可能去A點(diǎn)了。
所以,要先找到公倍數(shù),1,2,3,4的最小公倍數(shù)是12(當(dāng)然你非要用24也可以),就是說要寫一個(gè)循環(huán)到12的計(jì)時(shí)器,讓其中一輪前往A(注意用到檢測信號關(guān)),這樣就能讓四個(gè)士兵一個(gè)個(gè)去送死的。
解法如圖,第一行為1開。
如果看不懂計(jì)時(shí)器,請前往以下鏈接學(xué)習(xí)。https://www.taptap.com/topic/4830721
解釋一下第六行,為什么是信號432(也就是計(jì)時(shí)到十進(jìn)制的7)的時(shí)候前往A。
假設(shè),四個(gè)單位都向A點(diǎn)走一幀就會被狙擊打死。
那么當(dāng)我讓它們計(jì)時(shí)到信號432開也就是7的時(shí)候前往A,則
1 2 3 4 5 6 7 8 9 10 11 12(計(jì)時(shí)器12個(gè)輪次)
1 2 3 4, 1 2 (3) 4, 1 2 4, 1(每輪對應(yīng)的單位)
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),
其中括號里面數(shù)字代表某號單位死亡,逗號分割了每幀。
死亡順序?yàn)?-2-1-4。
其中,3號死在第2幀,2號死在第6幀,1號死在第12幀,4號第23幀前往A。(注意一幀的概念:從第一個(gè)單位到最后一個(gè)單位的檢測過程與指令檢測完畢的執(zhí)行過程,這兩步合起來就是一幀)
那么,我們可以發(fā)現(xiàn),如果讓第一個(gè)士兵走3x+1幀死亡,第二個(gè)士兵2y+1幀死亡,(x與y為大于等于0的正整數(shù)),死亡順序必然是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),
其中[]表示某單位開始行走,()表示某單位死亡。
死亡順序?yàn)?-1-2-4。
————————
而本關(guān)中,我們期望的順序是1號最后一個(gè)前往A。
不同于上面說的特定幀數(shù)死亡,本關(guān)你并不知道每個(gè)單位前往A到死亡會經(jīng)過幾幀,但是,每個(gè)單位死亡的幀數(shù)一定是固定的,因?yàn)楦鱾€(gè)單位到A點(diǎn)的距離是固定的。
所以只要嘗試讓2號先死(信號3),3號先死(信號32),4號先死(信號4),那么必然能找到一個(gè)解(注意用到檢測信號關(guān))。