欢迎光临散文网 会员登陆 & 注册

原子之心颜色圆盘锁的快速解密方法

2023-02-26 06:12 作者:1CNiEkJAY5_YJC6  | 我要投稿

今天撸了一把原子之心,解密部分还蛮有意思的,遇到几次颜色圆盘锁,简单的还好,复杂点的花了十分钟还解不出来 ╮(╯▽╰)╭,特别是两种颜色以上的。


后来我想了一下,这个解密过程其实可以抽象成算法问题。圆盘上有一个内圈,其中包含8个圆,每个圆里可能有一种颜色,也可能没有颜色。因此,我们可以用一个长度为8的数组来表示这个内圈,不同的颜色可以用不同的整数来表示。例如,0表示没有颜色,1表示黄色,2表示蓝色,以此类推,不会超过8种颜色。


我们假设数组第一个元素对应12点方向的颜色,按顺时针走,得到一个初始状态。同样的,我们的目标状态是外圈的顺时针数组。比如下面这张图, 假设3表示红色,则:

初试状态是 3 0 0 0 0 0 1 3

目标状态是 0 3 1 0 0 0 3 0

[3,0,0,0,0,0,1,3]

一个状态只有三种方式转移到下一个状态,数组向左移2,数组向右移2,或者数组的第4到第6个元素自身右移1。所以,整个解密过程相当于找一个从初始状态到目标状态的最短路径,而状态的每一步转移代价相同,所以相当于在边权都为1的有向图上找两点之间的最短路,并打印出来。 所以我立刻想到用dfs来实现这个解密过程。(当然,bfs更好,因为少了递归调用栈的使用。)


Anyway, 基于此我快速写了个基于dfs的命令行的demo,用哈希表和一些判断做剪枝优化,最后将最短路径映射到PS5手柄按键序列并打印出来。比如图中的其中一个最短路径解法是:

L2 X X R2 X L2 X X R2 X L2

Demo已经开源到  https://github.com/H-Shen/DotsLockCracker ,由于时间紧迫没来的做CICD,欢迎提issue。如果需要支持其他平台 比如PC,则将源码键盘映射部分改成对应平台的游戏按键再重新构建就行了。


原子之心颜色圆盘锁的快速解密方法的评论 (共 条)

分享到微博请遵守国家法律