盲拧简介
盲拧的困境
盲拧,顾名思义,就是转动的时候不能看魔方,因此在还原之前,就需要先把魔方的状态记住。然而当我们试图用睁眼还原魔方的方法去记忆时,发现这完全不可行。因为我们的方法是将整个过程分成很多个独立的步骤,每个步骤中分多种情况来解。各个步骤中我们只需要关心一部分要解决的块,对于那些我们并不关心的块,试图去追踪他们在各个步骤前后的状态变化,是非常困难的。
方法探索
先决条件
虽然即使不会还原魔方,也可以直接学习盲拧,但依然强烈建议先学会基础还原法,因为下文中讲解到的一些情况、公式、原理等,
下面,本文将由浅入深逐步引导进行盲拧原理的探索。
文本中魔方示意图将都以黄色朝上、红色朝前的方式放置
三棱换的情况
在尝试解决一些复杂的问题时,我们通常会先假设最简单的情况。
让我们先将魔方按照如下序列打乱: R2 U (R U R' U') R' U' (R' U R')
这是一个标准的三棱换的情况,如果会PLL,那么可以直接用公式解决。
我们似乎有了一些思路,这个公式不会打乱其它的块,利用这一点,我们就可以处理任意三个棱块的循环而保持其它块的状态不变。
下面我们增加一些难度。
将魔方复原之后,按照如下序列打乱: R U (R U R' U') R' U' (R' U)
。
打乱完之后我们会发现这也是一个三棱换的情况,只是并不是我们熟悉的PLL。在并不知道打乱序列的情况下,尝试还原这个状态,或许可以用一个小技巧:我们先做一个R'
,那么三个块的位置关系就变成了我们熟悉的PLL情况,用 (R U' R U) R U (R U' R' U') R2
来复原即可,做完这个公式之后,只需要再做一个R,就复原了魔方。连起来就是 R' (R U' R U) R U (R U' R' U') R2 R
提示
操作的第一步R,和最后一步R',构成了互逆的两个操作,分别称为set up和reverse,经常用于将我们难以直接解决的情况,通过预设的变化调整到熟悉的情况,再用它的逆操作来恢复。这个思想的运用是盲拧实践的重要组成部分。
棱翻色
再考虑有单个棱块位置正确但方向不正确的情况。我们将魔方按照以下序列打乱:(M' U M' U) (M' U M' U2) (M' U M' U) (M' U M')
,得到如下图状态:
我们固然可以将这种情况视为块位置正确而方向错误的情况,但这种理解方法增加了特殊性,换一种思路,魔方转动的路径都是块上的面朝某方向移动,因此,抛弃原地翻色的概念,而将处理过程统一看做是面归位,就得到如下图:
在这种思想下,可以将上图的情况拆分成两次三棱换。先直接做一个三棱块的公式 R2 U' (F B') R2 (F' B) U' R2
变成下图:
现在的情况就与上文中三棱换的情况类似,为了将其调整成我们熟悉的三棱换,先做 F U' R
的setup将需要交换的三个块的面调整在同一个平面上,再做对应的三棱换公式 (R' U R' U')(R' U')(R' U)(R U R'2)
,最后做 R' U F'
reverse回去即可。
依照这种想法,我们就可以处理任何需要在原地翻色的情况。
这不是唯一的解决思路,但是一个很重要的思路。
多个块的循环
打乱序列: D B2 L2 D' U2 B2 D' R2 D R F' U' F U' R' U2 R' U'
观察后我们发现这是一个由5个块形成的环,假设我们用FL块(表示前层和左层所夹的位置)作为起点, 那么状态可以表示为: FL->BR->RU->UB->FR->FL...,5个块形成了一个循环,起点也只是我们随意挑选出来的。
就好像三棱换是一个3个块构成的循环,这个状态也可以称为五棱换。
我们可能只会一次解决三棱换的情况,所以可以将这个五棱换拆分成两次三棱换:
即先做 FL->BR->RU 的三棱换,做完之后FL位置上的块依旧没有正确,因为RU位置上的块被换到了FL位置,而这不是我们的初衷,我们想要FR上的位置换FL位置。所以第二个三棱换就是 FL->UB->FR。
这样就处理了五棱换的情况。而我们之所以拆分成两次三棱换,是因为受限于我们所会的公式量,假以时日我们能直接用一个公式来复原这个五棱换,那么这个公式 就类似于 U R U2 R U F' U F R' D' R2 D B2 U2 D L2 B2 D'
,背这类公式实在是一种累赘。
这里还有一个重要的概念,注意到我们用了两个字母的组合表示成一个块,而我们知道,setup成三棱块的情况,并不单单把三个块放在同一层就行了,还同时要保证他们每个块的朝向一致,就好像我们说PLL中所有块都是平移交换的,因此在setup过程中,我们要标识每个块的朝向,保持一致。
我们注意到FL位置块的F位置将要去BR位置的B位置,因此BR块我把字母B写在R的前面,这样,我们就约定好了在块移动位置的时候如何保证块上颜色的方向的一致性。
我们也应当逐渐将这种块的平移加上自身翻转,理解为块上的面的移动,这有点像运动的合成的概念,而事实上我们本应这样理解。这仿佛又将魔方从块的概念回到了面的概念,魔方一共有20个角块和棱块块,同时,又可以理解为有48个角块和棱块的面。既然是面的移动,那么每个块用一个符号表示就行了。本例中的 FL->BR->RU->UB->FR
完全可以用 α->β->γ->δ->ε
来表示,这比一次记两个字母可容易多了。
多个循环及偶环
上文中我们提高了一个循环的概念,虽然循环这个称呼并不是最贴切,但我们一直沿用了下来。
更多时候,所有棱块的状态不仅仅只有一个循环。比如,对棱换的情况就是由两个循环构成的棱块状态
在这个例子中,存在两个循环,每个循环都有2个块,这种有偶数个块构成的换称为偶环。显然,单独一个偶环是不能被还原的,必须配合另一个偶环一起还原。
虽然我们可以通过拆分成多次三棱块的情况来解决,但问题是,如果魔方存在大量循环,甚至必须有多个环同时变换的偶环时,每次拆分成三棱换之后的状态将会变得难以追踪,如何在观察阶段就能预先知道拆分成了哪些位置的变化呢?
我们用一串字母模拟块的位置关系,每个字母代表一个位置,箭头表示这个位置上的块要去的正确位置,括号表示这是一个循环,所以循环的最后一个位置上的块要去的位置就是第一个字母代表的位置。
(A->B->C->D) (E->F->G) (H->I)
首先做 (A->B->C) 的三棱换,做完之后的状态为:
(A->D) (E->F->G) (H->I)
再做 (A->D->E) 的三棱换,做完之后D位是正确的,E位置上的块到了A位置,于是A位置要去的位置变成了原本E位置要去的位置,也就是F,即A->F,F位置的块没有动过,因此F仍然要去G,G位置也依然要去E,而E位置上的块现在变成了原本D位置上的块,D位置应该去A位置,所以E->A,于是现在的情况就可以记为 :
(A->F->G->E) (H->I)
接着我们做 (A->F-G) 的三棱换,做完之后变为:
(A->E) (H->I)
做 (A->E->H),同上述的分析过程,变为:
(A->I->H)
由此,我们可以得出一些规律:
当一个三棱换涉及到跨循环的时候,后面一个循环的第一个位置总是不会被调正确,反而需要被这个循环原本的最后一个位置所指向,于是为了“见标记识做法”,我们可以在后续循环的最后增加一个该循环的第一个字母。
上述的例子 (A->B->C->D) (E->F->G) (H->I) 的写法,就可以写成类似 (A->B->C->D) (E->F->G->E) (H->I->H),进一步简化成 A, BC, DE, FG, EH ,IH 这样的一串编码,其中每一组的两个字母与第一个字母A构成一组三棱块。
另外,我们还发现,这串编码的第一个字母A,如果它没有被正确还原,那么每次三棱换都会经过它,我们把这个位置称为缓冲块,缓冲块是进行多个循环的核心,也是盲拧中最重要的概念之一。
扰动簇
上文中我们都是用的棱块举例,而角块也同样如此,在此不再举例。
但还有一些情况我们仍然没有提到。我们知道魔方存在角块和棱块两种簇需要同时变换才能复原的情况,我们将这种操作称为扰动。
PLL公式中,就有许多公式同时处理棱块和角块,并且不存在仅仅只交换两个棱块或者两个角块的情况。
利用这些PLL公式,就可以处理扰动的情况。如下图:
上图中 UFR角块和DFR角块需要交换、UF棱块和UR棱块需要交换,并且块的面的关系也已用箭头指出。
我们可以通过 D2 B2
将DFR角块setup到 ULB位置,此时,4个块的位置关系就是PLL中的 Y perm,就可以解决。
为了避免过多处理扰动的情况,我们通常会先尽可能处理所有同种簇,比如先处理所有角块,如果最后剩下两个角块交互,那么等再处理完所有棱块,剩下两个棱块再与两个角块进行最后的处理,通常称为奇偶校验。
在后续的介绍中,我们还会讲到,我们常常固定setup成同样的case,避免每次遇到不同情况时消耗多余的思考精力和时间。
最佳实践
根据上述的探索过程,我们采用三循环的处理方法,就可以只用非常少量的PLL公式来盲拧魔方。并且从面向魔方状态的编码转变成了面向解决过程的编码,这大大简化了在实际操作过程中的关注点。事实上,如何编码,就决定了如何解魔方。
三循环
为什么是采用三个块的循环的叠加方式而不是别的方式?尽管我们是从熟知的PLL公式为线索,但这种链式结构的编码也同样适合于任意数的循环,3循环、5循环、7循环。采用三循环的原因,无非是由三阶魔方的一些特征决定的,比如经常会有多个循环、小循环,单个循环可能不包含太多的块,这时他们之间的叠加关系本身就已经很复杂,采用一次能同时解决很多块的循环并没有意义。受限于我们的公式量,采用三循环似乎也是势在必行。
在实践中我们也发现,三循环依然存在诸多问题,比如在处理单翻色、极小的循环中,一次进行三个块的操作既然有些鸡肋,并且进行setup每次需要移动2个块,这样就对setup和reverse的预处理提高了一些要求。
逐块法
于是,另外一种逐块法的思想也被提出。逐块法即逐个处理每个块。上文中,我们将到缓冲块的概念,由于缓冲块的存在,三循环其实一次处理2个块,而逐块法每次是交换2个块的位置。我们也知道,每次交换2个块,必定伴随一次魔方的扰动,即另外一个簇也会被交换至少2个块。原理与三循环非常类似,并且在处理复杂的小循环情况下比三循环有更大的优势,每次setup也只需要处理一个块,大大简化操作。
工业化方案
与速拧类似,为了真正能完成盲拧,必须提前制订一套标准化的流程方案,而且盲拧有观察记忆的过程,如果不能连续性地进行,很容易因为停顿而产生错误,只要出错一步,最后整个状态就会错误。
上文提到,将魔方状态用编码表示,于是必须制定一套编码规则。编码与我们的解法相关,因此对应于编码规则,需要一套配套的解码规则,在编码和解码规则下才能进行解法,最后才能还原魔方。
约定
与速拧类似,为了方便学习及实践,我们通常固定魔方的朝向、所需公式、编码方式,这些预处理都是为了简化在进行时的思考
初始方向
在本书的三阶盲拧教程中,打乱之后魔方的初始朝向都约定为黄色中心所在的面朝上,红色中心所在的面朝自己
色片代号
我们也约定用单个字母表示每个棱块和角块的面,如下图:
小结
在这一章中,我们从案例入手,一步一步探索了盲拧魔方的过程,对盲拧及其原理有了一定的认识。理解了这些原理,将非常有利于后续的实践。
在后面的章节中,我们会详述目前较为成熟、流行的盲拧方法,然而这些方法也并不是唯一可用的,只是经过多年来行业的沉淀,并且每个人都可以根据自己的能力和特点进行调整。