Rubik's Cube Blindfold
前言#
盲拧, 作为一项复原手段, 与我们熟知的速拧有着本质的不同. 速拧依赖于观察魔方状态的实时反馈, 是一个”闭环控制”过程; 而盲拧则是在蒙上双眼后, 仅凭记忆执行一系列操作, 是一个”开环控制”过程. 这两个系统虽然逻辑迥异, 但在一些技巧上却有共通之处.
盲拧入门最大的挑战之一, 就是如何将魔方的状态编码并牢记. 目前流行的”彳亍法”1最初是由 彳亍 于 2006 年在 mf8 论坛上提出的, 其作为三循环二步法虽然强大, 但其编码对于新手而言记忆熟练负担较重. 为了解决这一痛点, 本文在现代”彳亍法”教程2345的基础上, 设计了一套更符合直觉, 更易于记忆的编码图, 希望能为广大魔方爱好者打开盲拧世界的大门.
彳亍法盲拧的基本思路可以简要概括为: 首先, 将打乱后的魔方角块和棱块的位置, 分别按照特定规则编码成两个字母字符串. 每个字符串大约包含 20 个英文字母. 记住这两个字符串后, 在蒙眼复原时, 依次按照三循环公式, 将字符串中的每一对字母所对应的块复原到正确位置. 当这两个字符串全部执行完毕, 魔方的角块和棱块也就全部复原了.
因此, 与速拧相比, 学习盲拧彳亍法时主要需要掌握以下四大部分内容, 学习顺序也是一样的:
- 新的复原流程.
- 熟记魔方上每个面所对应的字母编码.
- 掌握应用在字母编码上的三循环公式, 并且能够在睁眼的状态下用盲拧公式复原魔方:
- 简单版本中, 我们只考虑缓冲块与顶层非对角的两个块的三循环公式, 角块需要 8 个公式, 棱块需要 18 个公式;
- 复杂版本中, 我们考虑任意两个块和缓冲块之间的三循环公式, 角块公式多达 440 个, 棱块公式有 378 个, 总计 818 个公式, 这也是”盲拧彳亍 818”名称的由来.
- 学习如何记忆这两个总长约 20 个字母的字符串, 方法如下:
- 将每两个字母联想成一个词语进行记忆;
- 用拼音 (或双拼) 来记忆两个字母;
- 像记电话号码, 车牌号一样, 直接顺序顺口读下来;
- 对于初学者, 建议全部采用联想记忆法. 速度提升到两分钟以内后, 可以尝试”记角读棱法”: 用方法 2 记忆较短的角块编码, 用方法 3 记忆较长的棱块编码, 复原时优先还原棱块, 以防遗忘棱块编码.
下文中所有打乱公式和复原公式都可以在三盲训练器 ↗进行练习测试, 这是一个很有助于理解盲拧过程的工具!
编码#
设计理念#
参考文献67, 我设计了一套新的编码图, 旨在融合 Speffz 编码的逻辑性和中文编码的顺口性, 为初学者提供一套更易上手的盲拧记忆方案.
- 对比彳亍编码: 传统的彳亍编码记忆点较为零散, 新手容易”从入门到放弃”. 我的设计更注重字母排布的规律, 降低了记忆门槛.
- 对比 Speffz 编码: Speffz 作为国际标准, 是由 Ville Seppänen ↗ 和 Rob Holt ↗ 于 2010 年为了方便交流提出的标准化方案, 逻辑性极佳, 但字母本身难以与中文的形象或拼音关联, 不便于中文母语者通过组词等方式记忆.
编码详解#
- 顶层 (U Face): 完全遵循
Speffz编码的A, B, C, D顺序, 一组连续字母, 方便整体记忆. - 前层 (F Face): 字母为
E, F, G, X. 可以联想为这个面正对着”我 (Me)”, 所以以E开头.E, F, G字母连续, 朗朗上口.X则作为一个特殊字母, 与右, 后, 左面的Y, Z, W形成一组. - 右, 后, 左层 (R, B, L Faces): 首字母分别为
R, O, L, 可记为Right(右),Opposite(前层的对面),Left(左). 每个面同样搭配了易于记诵的连续字母. - 底层 (D Face): 字母为
H, I, J, K, 一组连续字母, 方便整体记忆.
编码流程#
前文已经简要介绍了盲拧的基本思路, 下面将详细梳理整个复原流程, 帮助读者更清晰地理解每一步的操作.
顺序编码#
编码的起点是缓冲块的上方: 对于棱块来说, 是 UF 棱块的 U 面; 对于角块, 则是 UFR 角块的 U 面. 读码时常常先记角块, 因为角块字符串更短; 复原时则常先做棱块, 这样更不容易把较长的棱块串忘掉. 这里先以棱块为例说明.
假设当前位于缓冲位置的是 UL 棱块的 U 面, 那么第一个编码就是 D. 原因是这块棱块在我设计的编码方案中对应字母 D. 接下来就跳到 D 位置, 看那里的色面所属的块下一步该去哪里; 如果它应该前往 B 位置, 第二个编码就是 B, 依此类推, 直到所有棱块都被编码完毕.
所以编码编的是当前位置的块名, 下一个位置的位置名, AA 位置的块是 BB 块, BB 位置的块是 CC 块, 那我们的编码就是 BB CC.
翻色#
如果打乱后有某个棱块或角块虽然位置正确但方向错误, 那么就称这样产生了翻色情况.
如果需要翻色的块数为偶数, 则这些块一起翻色; 如果为奇数, 则这些块和缓冲块一起翻色, 具体做法是额外做一个翻色公式即可.
详情可参考视频: 彳亍法教程——关于翻色 ↗ 和 读码实例(1)翻色部分 ↗.
小循环#
在实际编码过程中, 我们常常会遇到这样一种情况: 顺序编码时, 某个块需要回到缓冲块的位置, 但此时还有其他块尚未被编码. 此时, 顺序编码会提前”断开”, 形成一个提前结束的循环, 也就是小循环. 为了继续完成编码, 我们需要主动选择一个尚未被编码的块, 作为新的”起点”, 继续顺序编码, 直到所有块都被编码为止 (P.S. 有点像四阶速拧复原后 8 棱的时候最后剩下最后两个棱对换的感觉).
具体做法可以看下面的具体实例, 这里不再赘述.
奇偶校验 (Parity Check)#
当编码长度为奇数时 (棱块和角块编码长度必然同奇偶), 需要进行奇偶校验.
奇/偶状态与产生原因: 魔方的奇状态是由于打乱转动度数之和为 90 度的奇数倍造成的, 因为魔方每转一次90度会造成棱块四循环和角块四循环, 而魔方中对于棱或角来说最小循环是三循环, 用三循环无法解决四循环, 所以就出现了奇状态. 魔方在还原状态下只转一步U即可得到奇状态; 魔方在奇/偶状态下转任意一步90度可变为偶/奇状态8.
方法很简单: 只需在棱块和角块编码后各加一个 B, 并在复原最后执行一次 PLL Jb Perm: R U R' F' R U R' U' R' F R2 U' R' 公式即可.
但是也有特殊情况. 如果最后一个编码和补上的 B 落在同一个角块或棱块上, 这两个字母就不能组成合法的三循环目标, 这时就要改补另一个字母, 比如 A, 同时把最后的 PLL 换成对应公式.
举例说明: 黄顶蓝前打乱: B' L' F2 L B R' D2 R B2 L2 F2 L' U2 L' B2 R'
此时角块编码为 BT S. 如果还是添加 B 进行奇偶校验, 最后一个编码对就会变成 SB. 这两个字母落在同一个角块上, 对应不到合法的三角换, 所以这里改为添加 A, 角块编码变为 BT SA, 最后执行 PLL V Perm: U2 (R' U R U' R' f' U' R U2 R' U' R U' R' f R) U2 公式即可.
复原流程#
按照顺序是:
- 棱块复原
- 角块复原
- 奇偶校验
- 翻棱
- 翻角
对编码应用公式#
编码完成后, 就可以开始应用公式进行复原.
例如, 若两个编码为 DB, 则直接使用 M2 U' M U2 M' U' M2 公式进行复原.
Set Up and Reverse#
如果没有记住任意两块之间的复原公式 (共 818 条), 可以只记顶层 (或者别的一部分) 的基础公式, 配合 Set Up and Reverse 技巧完成复原. Set Up and Reverse 的原理是: 先将目标两块通过预处理 (Set Up) 转移到某两个已经知道公式的位置, 应用已记住的公式进行复原, 最后再按相反步骤 (Reverse) 将两块归位. 这个过程类似于”入栈”和”出栈”.
但是注意 Set Up 过程中, 不能移动缓冲块, 否则公式就不再针对当前缓冲块 (除非你清楚缓冲块的新位置并能应用相应公式). 并且在刚开始学习的时候一定要规定好 set up 的固定步骤, 如果每次 set up 都需要思考, 那就非常容易出错了.
公式#
三循环公式的总结. 三循环公式是调换任意三个块 (棱块或角块) 而不影响其他块的公式.
这里给出blddb ↗中得分最高的公式 24+18, 复杂版本的公式可以在这个网站上自助查询:
- 棱块缓冲块和顶层其他三个块三选二之间三棱换的公式. 给出所有 24 个顶层公式因为这样 setup 比较灵活方便.
- 角块缓冲块和
UBL,DBL之间三角换的公式. 选这两个块是因为这两个位置比较灵活, 可以做到所有位置两步 setup 到这两个块上9.
棱块公式#
| 编码 | 交换子 | 展开公式 |
|---|---|---|
| 左右 | ||
| BD | M2 U:[M,U2] | M2 U M U2 M' U M2 |
| DB | M2 U':[M,U2] | M2 U' M U2 M' U' M2 |
| BL | [S',L F' L'] | S' L F' L' S L F L' |
| LB | [L F' L',S'] | L F' L' S' L F L' S |
| RD | [R' F R,S] | R' F R S R' F' R S' |
| DR | [S,R' F R] | S R' F R S' R' F' R |
| RL | M U':[M',U2] | M U' M' U2 M U' M' |
| LR | M U:[M',U2] | M U M' U2 M U M' |
| 右后 | ||
| BA | R2 U':[R2,S] | R2 U' R2 S R2 S' U R2 |
| AB | R2 U':[S,R2] | R2 U' S R2 S' R2 U R2 |
| BO | r':[U' R U,M'] | r' U' R U M' U' R' U R |
| OB | R':[U' R U,M] | R' U' R U M U' R' U r |
| RA | S U':[R2,S] | S U' R2 S R2 S' U S' |
| AR | S U':[S,R2] | S U' S R2 S' R2 U S' |
| RO | R:[U R' U',M'] | R U R' U' M' U R U' r' |
| OR | r:[U R' U',M] | r U R' U' M U R U' R' |
| 左后 | ||
| AD | L2 U:[S',L2] | L2 U S' L2 S L2 U' L2 |
| DA | L2 U:[L2,S'] | L2 U L2 S' L2 S U' L2 |
| AL | U' M U':[M',U2] | U' M U' M' U2 M U' M' U |
| LA | U' M U:[M',U2] | U' M U M' U2 M U M' U |
| OD | L:[U L' U',M] | L U L' U' M U L U' l' |
| DO | l:[U L' U',M'] | l U L' U' M' U L U' L' |
| OL | l':[U' L U,M] | l' U' L U M U' L' U L |
| LO | L':[U' L U,M'] | L' U' L U M' U' L' U l |
对棱翻色公式: M' U M' U M' U2 M U M U M U2
角块公式#
| 编码 | 交换子 | 展开公式 |
|---|---|---|
| AK | R' U' D' R:[R U' R',D] | R' U' D' R2 U' R' D R U R' D' R' U D R |
| KA | R' U' D' R:[D,R U' R'] | R' U' D' R D R U' R' D' R U R2 U D R |
| AQ | U' D':[R D R',U2] | U' D' R D R' U2 R D' R' U' D |
| QA | U D':[R D R',U2] | U D' R D R' U2 R D' R' U D |
| AW | U':[R D' R',U2] | U' R D' R' U2 R D R' U' |
| WA | U:[R D' R',U2] | U R D' R' U2 R D R' U |
| LK | R:[R D' R',U] | R2 D' R' U R D R' U' R' |
| KL | R:[U,R D' R'] | R U R D' R' U' R D R2 |
| LQ | U D R':[U',R' D R] | U D R' U' R' D R U R' D' R2 U' D' |
| QL | U D R':[R' D R,U'] | U D R2 D R U' R' D' R U R U' D' |
| LW | R D':[R D R',U] | R D' R D R' U R D' R' U' D R' |
| WL | R D':[U,R D R'] | R U D' R D R' U' R D' R' D R' |
| PK | R2 U:[D',R' U' R] | R2 U D' R' U' R D R' U R U' R2 |
| KP | R2 U:[R' U' R,D'] | R2 U R' U' R D' R' U R U' D R2 |
| PQ | U' R' U':[R D' R',U'] | U' R' U' R D' R' U' R D R' U2 R U |
| QP | U' R' U':[U',R D' R'] | U' R' U2 R D' R' U R D R' U R U |
| PW | U2 R:[U,R D' R'] | U2 R U R D' R' U' R D R2 U2 |
| WP | U2 R:[R D' R',U] | U2 R2 D' R' U R D R' U' R' U2 |
角块翻色采用 (R U R' U') D (U R U' R') D' 等类似的翻色法.
奇偶校验#
当角棱编码中同时为奇数个字母时, 说明出现了奇偶校验问题, 按照上文给编码结束的地方加入 B 的描述, 需要额外执行 PLL Jb Perm: R U R' F' R U R' U' R' F R2 U' R' 公式进行奇偶校验. 这个公式的作用是让角棱缓冲块和两个 B 块同时做一个对换, 从而改变编码的奇偶性.
当然如果像前文提到的特殊情况一样, 最后一个编码和补上的 B 落在同一个块上, 这时就要改补另一个字母, 比如 A, 同时把最后的 PLL 换成对应的公式, 比如 PLL V Perm: U2 (R' U R U' R' f' U' R U2 R' U' R U' R' f R) U2.
Case Study: 编码复原流程示例#
考虑以下白顶绿前打乱, 编码坐标是黄顶蓝前: D L' F2 R B2 D' B2 R' U' F' U' R2 D' B2 U' L U L F' R' D R2 D' B2
这个打乱将包含以下所有知识点: 顺序编码, 翻色, 奇偶校验, 小循环. 通过在这个示例上应用 Set Up and Reverse 和三循环公式, 希望读者能够更清晰地理解整个盲拧复原流程.
角块编码#
从缓冲块开始, 当前 C 位置的块是 E, E 位置的块是 C, 回到了缓冲块, 形成一个小循环. 注意此时只用编码 E 即可, 不用把 C 也编码出来, 因为 C 是缓冲块, 缓冲块对应的字母永远不会被编码, 因为别的块如果都在正确的位置, 那缓冲块自然也在正确位置, 可以想像现在这个小循环是一个只有两个块的魔方, 此时只用一个编码就能复原魔方, 没必要说 E 位置的块是 C 还要回到缓冲位置. 这段编码是 E, 复原了一个块.
选择一个未编码的块作为新的起点, 例如选择 A 位置的块, 编码为 A, A 位置的块是 J, J 位置的块是 P, 回到了小循环起始的地方, 小循环结束, 这段编码是 AJ P, 复原的块为 4-1=3 , 必然还没复原完成, 要选一个新的块作为新的小循环起始的位置.
选择 X 作为新的小循环起始点, X 位置的块是 Y, Y 位置的块是 N, 小循环再次结束. 这段编码是 XY N, 复原了两个块.
然后发现已经复原完成 5 个角块, 再加上 DLB 本来就正确的块, URB 原地翻色的块, 还有缓冲块, 总计八个块, 编码完成.
然后处理特殊情况, 由于编码长度为奇数, 需要进行奇偶校验, 因此在编码后加一个 B. 并且由于存在奇数个角块原地翻色, 所以需要让缓冲块和 B 块同时做角块翻色公式, 考虑到原地翻色的 B 会被移动到 C 位置, 此时缓冲块和 URB 块分别是逆时针和顺时针翻色.
故角块编码为:
E(A JP) (XY N)B, 循环 OB
其中每个括号内部代表一个小循环, 最后一个 B 是为了奇偶校验而额外添加的. 最后的循环可以理解为把 C 挪到 O 然后把 O 挪到 B 的过程.
棱块编码#
同样从缓冲块开始, 当前 C 位置的块是 Y, Y 位置的块是 P, P 位置的块是 M, M 位置的块是 O, O 位置的块是 N, N 位置的块是 Z, Z 位置的块是 B 回到了缓冲块, 形成一个小循环. 这段编码是 YP MO NZ B, 复原了七个块.
此时 C 位置的块是 C, 这是高色相的块, 因此我们同样找高色相的位置 break loop, 假设我们找 D, 然后继续编码, D 位置的块是 J, J 位置的块是 G, G 位置的块是 L, 回到小循环开始的块, 小循环结束. 这段编码是 DJ GL, 复原了三个块.
现在复原的十个块加上 DR 原地翻棱和缓冲棱块, 总计十二个棱块齐了.
编码长度为奇数, 附加一个 B 进行奇偶校验, DR 原地翻色的棱块记为 IT.
故棱块编码为:
YP MO NZ B(D JG L)B, 循环 IT
总编码#
这里采用和读码还原助手 ↗类似的格式来表示总编码.
- 棱块编码:
YP MO NZ BD JG LB - 角块编码:
EA JP XY NB - 奇偶校验:
BB(第一个字母代表棱缓冲块去哪里, 第二个字母代表角缓冲块去哪里) - 翻棱:
IT - 翻角:
OB
如果记了更多的奇偶校验公式, 可以省下来单翻棱:
- 棱块编码:
YP MO NZ BD JG LI - 角块编码:
EA JP XY NO - 奇偶校验:
TB(第一个字母代表棱缓冲块去哪里, 第二个字母代表角缓冲块去哪里) - 翻棱: 无
- 翻角: 无
复原#
棱块复原: 按照编码 EA JP XY NB 对照公式逐对进行.
角块复原: 按照编码 YP MO NZ BD JG LB 对照公式逐对进行.
奇偶校验: 执行一次 PLL Jb Perm: R U R' F' R U R' U' R' F R2 U' R' 公式即可.
翻棱: 将 DR 原地翻色的棱块和缓冲块一起翻色.
翻角: 将 URB 原地逆时针翻色的角块和缓冲块顺时针一起翻色.
记忆方法#
我采用的是小鹤双拼记忆法10, 这种方法与双拼输入法的原理类似, 即用一个汉字来表示两个字母. 例如, 如果你的盲拧编码只有棱块的 ID, 在双拼输入法中可以对应为 拆 或 柴 字, 因此你只需要记住这个汉字即可.
当然, 有些字母组合可能没有对应的汉字, 这时我们可以用其他拼音方式来替代. 例如, 编码 C 代表缓冲块, 不会被编码, 所以在没有对应汉字的情况下, 可以将双拼的第一个或第二个音节替换为 C.
具体的设计细节可以参考 CubeRoot 双拼记忆法 ↗, 这里不再赘述.


