Neboer / Genshin-Inadzuma-block-puzzle-solver

原神稻妻关灯谜题求解器
3 stars 0 forks source link

原神稻妻关灯谜题求解器 2.0

原神稻妻有一类特殊的谜题,用攻击击中其中的某个灯块或者拨动某些方块的朝向就可以引起一些图案变化。这类谜题往往看起来非常简单,但是实际解决起来却比较复杂。 因为实际上这是一个经典的“关灯问题”,在2.0求解器里,这种问题的求解都化作了一类解整数线性方程组的标准问题,使得求解器可以处理模数更高的方程。

用法

软件没有图形界面,用户需要用终端与软件进行交互。运行solvercli.py文件,打开软件主会话。

模数:每个方块可能拥有的状态的个数。比如亮灯,每个方块可以亮灯的数量为1,2或3个,那么亮灯问题的模数就是3。如果是旋转问题,模数为方向数,即4。

初始状态: 一数字,指的是所有方块的初始状态。比如“312”表明,一共有3个方块,亮灯个数依次为3个、1个和2个。 又比如“4231”表明,一共有4个方块,朝向分别为西、东、南、北。注意,具体哪个数字对应哪个状态并不重要,只要相邻的状态的编号也相邻就可以。

目标状态: 一数字,指的是你期望这些方块最终达到的状态。比如“4”表明你希望最后所有的方块都朝向你规定的4号方向。 目标状态可以留空,也就是不输入任何数字直接回车。如果不输入任何数字,程序会自动考虑所有1-模数的值作为目标状态。

影响模式: 一数字,比如亮灯问题,对3个方块组成的阵列,攻击中间的方块之后,发现两侧方块亮灯个数都+1,已经亮3个灯的方块变为1灯。 这就说明对中间的方块(第2个方块)来讲,它的影响模式是“111”。每个“1”的意思都是:亮灯个数+1,再对3取模。如果攻击两侧方块,只有自己和相邻的方块变化了, 那影响模式就是“110”和“011”。对旋转问题也是一样处理。

计算: 在最后一个方块的影响模式输入完毕后,程序会开始计算。程序可能会得到多个解。程序会对所有解按照“总共需要消耗的步数”进行排序,然后再输出。

结果: 程序的结果也会以数字字符串的形式给出,比如

2230
0232
0232
3231
1233

代表程序找到了五个解,按照所需的操作步数从小到大排序。如果按照第1个解所说,攻击第一个方块2下,第2个方块2下,第3个3下,就可以解开这个机关了。

安装

这是一个python程序。首先你需要安装python 3.8以上的版本,访问https://www.python.org/downloads 下载最新的python程序。

安装完python,右键开始菜单,打开powershell(管理员),执行pip install sympy

安装完毕,请下载最新的代码release,然后解压到某个文件夹。

在文件管理器里打开这个文件夹,右键solver.ps1,发送到桌面快捷方式。

在桌面双击solver.ps1快捷方式,打开软件。

复杂的数学问题

“不要低估米哈游985策划的地狱级想象力。” ——Neboer

这个看似简单的解密,实则蕴含了一个很复杂的数学问题:求非齐次线性同余方程组的通解。