ルービックキューブの手順を覚えやすくしてみる(メトロ記法)

明けましておめでとうございます! 2021年もよろしくお願いします。

今回はいつものプログラミングの話題とは打って変わって、「ルービックキューブ」のお話です。

f:id:tkitao:20210104220551p:plain

なぜルービックキューブ

コロナ禍の中、在宅の時間が長くなり、何かちょっとした時間をつぶせるものが欲しくなったので、昨年の10月頃からルービックキューブを始めてみました。

細かいことを言うと、「ルービックキューブ (Rubik's CUBE)」はメガハウスのキューブの商品名で、私が始めたのはキューブの早解き競技なので、「スピードキュービング (Speedcubing)」あるいは「スピードキューブ」を始めましたというのが正しい言い方になるかと思います。

このキューブの早解きですが、「アルゴリズム」と呼ばれる100を超えるキューブの回し方の手順があり、それらをどれだけ多く覚えて、素早く当てはめていけるかがタイム短縮のカギになります。

ちなみに現時点の3x3x3キューブの世界記録は3.47秒と、もはや人間業とは思えない領域に突入している模様です。

www.youtube.com

従来のキューブ手順の表記法

キューブのアルゴリズムには、定番の表記法があります。

具体的には、キューブの上面にU、右面にR、同じく、手前、左、底、奥の面にそれぞれFLDBを割り当て、各面の正面から見て、時計回りであればアルファベットそのまま、反時計回りであれば後ろに'をつけて、R'(「アールプライム」と読む)のように表す表記法で、一連の動きを連ねたアルゴリズム『R U R' U' R' F R2 U' R' U' R U R' F'』のように記述されます。

f:id:tkitao:20210104215608p:plain

この表記方法ですが、記号と指の動きが結びつきづらく、なかなか暗記に苦労します。

私の感覚的には、暗記するには語呂が悪い上に、①記号を暗記する→②記号に沿って指を動かす→③指の動きを改めて暗記する、のように暗記することが記号+指で一回分増える印象です。

そこで、従来のアルゴリズム表記法とは異なる、視覚的にもう少し覚えやすい表記方法を作成して、ついでにそれを作図するプログラムも作ってみることにしました。

指の動きに注目した「メトロ記法」

キューブにアルゴリズムを適用する際に重要になるのは、「どの面をどちらに回すか」ではなく「どの指をどの方向に動かすか」であるように思います。

というのも、スピードキューブでは、効率の観点からキューブの持ち方や回し方はほぼ決まっており、左手でキューブを保持して、操作する面に割り当てた(主に右手の)指を決まった方向に動かすことが基本の動作になるからです。

f:id:tkitao:20210104220105p:plain

例えば、右面を時計回りに回転させる場合(R)は、右手の親指と人差し指で右列をつかんで、親指を上方向に動かします。また、上面を反時計回りに回転させる場合(U')であれば、右手の人差し指で上列を左方向に押す、あるいは左手の人差し指で上列を左に向かって引っ張るといった具合です。

従来のアルゴリズム表記法と力を入れる方向との対応を取ると次のようになります。

  • RR':右手親指をに動かす ↔ 右手親指をに動かす
  • UU':右手か左手の人差し指をに動かす ↔ 右手か左手の人差し指をに動かす
  • FF':右手人差し指を右斜め下に動かす ↔ 右手親指を左斜め上に動かす
  • LL':左手親指をに動かす ↔ 左手親指をに動かす
  • DD':左手薬指をに動かす ↔ 右手薬指をに動かす
  • B':右手薬指を右斜め下に動かす(Bは状況によってまちまち?)

この対応に基づいて、力を入れる方向に延びる直線で、アルゴリズムの一連の指の動きを図示してみることにしました。

作図してみたところ、地下鉄の路線図に雰囲気が似ていたので、この表記方法を「メトロ記法」と呼んでみることにしました。

実際にキューブの主要アルゴリズムをメトロ記法化してみたものがこちらです。

PLLアルゴリズム

https://github.com/kitao/metro-notation/blob/main/images/pll-algorithms.png?raw=true

OLLアルゴリズム

https://github.com/kitao/metro-notation/blob/main/images/oll-algorithms1.png?raw=true

https://github.com/kitao/metro-notation/blob/main/images/oll-algorithms1.png?raw=true

(PDF版はこちら

色のついた直線など、説明していない表記がありますが、上に書かれている従来記法と対比することで、意味は推測できるかと思います。(手書きの場合の書き方含め、いずれ詳細な説明書を作成するつもりです)

「メトロ記法」の作図プログラム

Pythonで作成したメトロ記法の作図プログラムはこちらになります。

github.com

アルゴリズム記述ファイルを作成することで、様々なアルゴリズムをメトロ記法で描画できるようになっています。

なお、今回は描画用の外部モジュールとして、定番のPillowを使用しました。

おわりに

まだまだスピードキュービングの初心者ですので、何かお気づきの点などあれば、@kitaoまでご連絡いただければ幸いです。

ちなみにちょっと引かれるくらい各社のスピードキューブも購入しているのですが、今一番のお気に入りは、GAN11 M Pro Stickerless UV-Coatedです。

f:id:tkitao:20210104221850p:plain

テカテカしているUV-Coated版は数量限定の生産とのことで、発売日のクリック競争に打ち勝ち、無事購入できて非常にうれしく思っています。