利用Python暴力求解《原神》游戏中“稻妻”中的一种解密 |
您所在的位置:网站首页 › 稻妻石头解谜 › 利用Python暴力求解《原神》游戏中“稻妻”中的一种解密 |
文章目录
一、解密玩法二、解密原理三、代码分析四、源代码
一、解密玩法
上述例子以矩阵相加的形式可以表示为: 所以,根据上述式子,我们先引入需要使用的矩阵计算库: import numpy as np然后定义等式右边的几个常量: arr_0 = np.array([2, 2, 2, 1, 1]) arr_a = np.array([1, 1, 0, 0, 0]) arr_b = np.array([1, 1, 1, 0, 0]) arr_c = np.array([0, 1, 1, 1, 0]) arr_d = np.array([0, 0, 1, 1, 1]) arr_e = np.array([0, 0, 0, 1, 1])然后,很容易知道,如果击打某个石头的次数超过2,则不超过2的击打部分其实是多余的,所以我们在击打次数为0到2之间遍历求解: for a in range(0, 3): for b in range(0, 3): for c in range(0, 3): for d in range(0, 3): for e in range(0, 3): arr_all = arr_0 + a * arr_a + b * arr_b + c * arr_c + d * arr_d + e * arr_e在代码中,点数到三之后再加一会编程四,而不是变为1,所以,最后的结果中只要点数与3的余数相同,则点数相同: if arr_all[0] % 3 == arr_all[1] % 3 == arr_all[2] % 3 == arr_all[3] % 3 == arr_all[4] % 3: print(a, b, c, d, e)最后,提示跑完了: else: print("运行完毕!")最后跑出来有多种结果: 0 0 0 0 1 0 1 0 0 2 0 2 0 0 0 1 0 0 1 1 1 1 0 1 2 1 2 0 1 0 2 0 0 2 1 2 1 0 2 2 2 2 0 2 0 各位可以脑测一下,每种都能解出来,所以我们随便选择了一种,就成功解出 源代码如下,寥寥数笔,没有什么技术含量,唯一一点有技术含量的东西可能是运用了“for循环的else奖励机制”这个语法糖,顾名思义,也就是在for循环后面加上else,当for循环完全执行完之后(也就是说没有执行break、continue这种语句时),则会执行else下的代码。 import numpy as np arr_0 = np.array([2, 2, 2, 1, 1]) arr_a = np.array([1, 1, 0, 0, 0]) arr_b = np.array([1, 1, 1, 0, 0]) arr_c = np.array([0, 1, 1, 1, 0]) arr_d = np.array([0, 0, 1, 1, 1]) arr_e = np.array([0, 0, 0, 1, 1]) for a in range(0, 3): for b in range(0, 3): for c in range(0, 3): for d in range(0, 3): for e in range(0, 3): arr_all = arr_0 + a * arr_a + b * arr_b + c * arr_c + d * arr_d + e * arr_e if arr_all[0] % 3 == arr_all[1] % 3 == arr_all[2] % 3 == arr_all[3] % 3 == arr_all[4] % 3: print(a, b, c, d, e) else: print("运行完毕!") |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |