餘數解題分析|異常


3樓貓 發佈時間:2021-12-29 16:00:06 作者:^_^o~ Language

餘數解題分析|異常 - 第1張餘數這關的四個士兵屬於同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或保持站立)。
餘數解題分析|異常 - 第2張解法如圖,第一行為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),那麼必然能找到一個解(注意用到檢測信號關)。
餘數解題分析|異常 - 第3張經過嘗試,上圖為信號32(十進制3)讓3號先死時,死亡順序是3241,這是一個解。
反推可以得到3號經過3x+1幀後死亡,2號經過2y+2幀後死亡(x與y為大於等於0的正整數)。

由於初始單位有4個,那麼再把32(十進制3)這個解加4x幀再啟動,也就是信號432(十進制的7),還有信號532(十進制11)。
這兩個都是可以的,如下:餘數解題分析|異常 - 第4張餘數解題分析|異常 - 第5張(上圖第六行省略了檢測信號關)

最後一步:開火點。
這關最後一個難點在於何時開火,因為變態作者把時間調的很極限,這個沒辦法,只能試,所以得到最終解,第一行為信號1開。
餘數解題分析|異常 - 第6張正解之一(如上圖),應該還有其他解,不過開火點懶得調試了。

附一個信號與十進制對照表
餘數解題分析|異常 - 第7張

© 2022 3樓貓 下載APP 站點地圖 廣告合作:asmrly666@gmail.com