我们在很多游戏中可以看到这样的解密:需要把每一块转到正确的位置,但是块与块之间的旋转是联动的。比如下图(初始状态):我们需要每个方块的花瓣数量(0~3)相同即可完成解密,该解谜规则是击打一个方块,它和它相临的两个方块的花瓣数+1,+之前是3花瓣的话+之后是0花瓣

容易发现对同一个方块击打4次会回到开始击打前的初始位置,所以我们的所有操作可以看作在mod4的情况下进行,我们给每个方块序号并对初始情况进行抽象:

得到初始矩阵为(1 1 2 2)T,若我们最终要使4个方块花瓣数全部为3,即(3 3 3 3)T,相减可得(2 2 1 1)T。这是我们需要对每个方块进行变化的数量mod4的结果
那么现在我们来求解应该对每个方块操作多少次:我们设一个向量(x y z w)T为一号方块操作x次、二号方块操作y次、三号方块操作z次、四号方块操作w次。我们还需要击打每个方块所造成的变化的矩阵,由前文可知:击打一个方块,它和它相临的两个方块的花瓣数+1,+之前是3花瓣的话+之后是0花瓣。以1表示+1的话,写成矩阵如下:

左边“打”表示击打的方块,“动”表示击打后转动的方块,数字表示转动角度,这里记1为90°
我们记该矩阵为A,即可列出方程:A·(x y z w)T=(2 2 1 1)T,等式两边同时左乘A-1即可求出(x y z w)T。
我们先讨论A不是奇异矩阵的情况:
这里可以在逆矩阵计算器中方便地计算出A-1,得到的结果是:

再计算A-1(2 2 1 1)T=(1 1 0 0)T,于是我们只需要一号方块击打一次,二号方块击打一次即可。放在游戏中操作顺利解开谜题
现在讨论A-1不存在,即A的行列式为0,即A为奇异矩阵的情况:
我们需要看非齐次线性方程组Ax=b的解的情况,即看矩阵A和矩阵(A|b)的秩
- 若不相等,则无解
- 相等而且非满秩,则无穷解
- 相等而且满秩,则只有0解
显然A行列式都是0了,就不可能满秩,排除3,游戏给宝箱在这不可能无解,排除1,所以只有拥有无穷解的情况,我们将矩阵A化成行最简,然后求出基础解系即可。
关于我的文科生朋友被解谜难住了问的问题,本着想露一两手的心态给她科普了一把线性代数,但是在我苦苦算逆矩阵的时候她给瞎试出来了(早点知道那个算逆矩阵的网站多好),装逼失败
1 条评论
starry · 2023年8月19日 下午8:37
看不懂,但是,大受震撼