toddler’s diary

以前は研究にあまり関係ない雑談・2023年4月から本を通じた自分の振り返りやってます

ルービックキューブへの挑戦と解法の最小記述!?

というわけでルービックキューブを解けるようにしようと挑戦をはじめました。

 

頭でっかちで記憶力の弱い数理工学者としては、群論でなんとかならないかとネット検索。するとたくさん出てきますが(例えばこれ→ルービックキューブと数学 http://www.math.nagoya-u.ac.jp/~h-nakashima/others/suriwave/suriwaveHN.pdf )、どうもちょっと想像してたものと違う。

私の勝手なイメージとしては、「ランダム配置を紙に書くかしてちょっと手計算すると解法手順が出てくる」っていうものだったんだけど、どうもそういうことではないらしい。

最短手順の証明とか、計算機で解法を探索するための絞り込みとか、人間が目の前のルービックキューブを解くのにはあんまり役に立たなそう。(たぶんだけど、目の前の配置を分析して手順を構成することはできなくはなさそう)

 

それで群論はすっぱりあきらめて、普通の人がするようにネット検索でできるだけ楽な解法を探すことに。

別にタイムを競おうとか全く考えてないので、覚えることが少ないものに飛びつく。そんな中でもわかりやすそうで最初に見たのがこれ→

3×3ルービックキューブ簡単6面完成攻略法<初心者向けのわかりやすい解き方>

 

これでも少し時間をかければ記憶力のいいひとなら短時間で習得できそう。

少なくともどんな順に組み立てていくかの概要はわかりました(これ以外の方法もあるみたいだけど)。

 

でもこんな初心者に優しいやり方でも、最大10手くらいのパターンを7~8個覚えてしかも場合分けなんかも覚えなくちゃいけなくてものぐさな自分にはちょっと無理。

というわけでさらに覚えることが少ないのはないかと思って見つけたのがこれ→

www.youtube.com

この「覚える動かし方は1つだけ」ってのに釣られましたw

 

正確に言えば1つではなく右パターンとそれに対称な左パターンの二つですが、対称なパターンなら覚えやすいし、しかもそれぞれたったの4手。

場合分けも上に挙げた web ページのものよりも少し少なくて記憶力に易しいです。

ただ、実際にはところどころにこの基本パターン以外の動きも入るので(だいたいは1手ですが)、覚えたと思って実際やってみるとうろ覚えのところで失敗したりしてましたが少し練習したら時間はかかるけどできるようになりました。

(下の方に注意点を書いておいたので動画と合わせて読むと覚えるのも早まるかも)

 

めでたしめでたし。 これで数十年の恨みを晴らしました。

 

最初は盲目的に手順に従うだけだったけど、余裕が出てくると途中何がどう動くかを見る余裕が出てきます。

最初は習うより慣れろという感じでしょうか。

 

今後の課題としては、これでもなんか覚える量がそれなりにあるのでもっと覚える量を減らすものがないかどうかの追及ですかね。

機械学習の研究者としては、ルービックキューブの解き方の最小記述長(MDL)みたいなものへの挑戦?

一度覚えてしまうとそのモチベーションもいまいちあがりませんけど。 

 

追記:少ないといえばこんなのも見つけたけど覚える手数が長くてツラい。自分には多少場合の数は増えても手数の短いのが合ってる気がする→

たった3パターン覚えるだけ!ルービックキューブ六面解法のコツ | nanapi [ナナピ]

 

追記2: 世の中には26年かけて自力で解いた人もいるようでそういうバイタリティ自分には全然ないです 

ルービックキューブ攻略に26年かけた男 - GIGAZINE

 

追記3: ふだん仕事で使っているデータ解析のための R という言語にルービックキューブを解いたりアニメーションしたりするというパッケージがありました。

CRAN - Package cubing

 

以下は解き方の覚書。

 

基本の動かし方:

まず記号の定義

R: 右面の時計回り。その逆の動き、右面反時計回りを R' とします。

U: 上面時計回り。その逆の動き、上面反時計回りを U' とします。

覚えるべき右側基本手順は X = R U R' U' の4手です。

4手と言っても、最初の2手をやったら残りはその反対をやるだけなんで覚えやすいです。

X の面白い性質は X^6 で元に戻るところで、群論的には位数 6 の部分群の生成元になってるんですね。

だから、何回回したかわからなくなっても繰り返せば元に戻ります。

また、動画ではわかりやすさのために X^5 というように5回も回すところがあるんですけど X の逆手順 X^(-1) = U R U' R' をやると覚えておくと手順が節約できます。

はじめのうちは5回もやってるとどっかで回し間違えたりするし、逆に逆手順をやろうとして回し間違えたり、どっちもどっちではあるんですが。(これが一番最後の完成寸前のところに出てくるものなので、完成寸前で崩してしまったことが何回も(涙))

 

一方、対称の左手順は、同様に L: 左面時計回り、その反対の左面反時計回りを L' とすると、

Y = L' U' L U です。対称なんで覚えるのは難しくないです。

 

それで、基本手順を使った最初に調べた web ページと同じで、

1)上面十字 2)上面角 3)2段目 4)下面十字 5) 下面角位置 6)下面 7)完成

という段階で完成させます。

最初の2段階くらいは何も知らなくてもできるので、後半を少しずつ覚えていくということですね。最後が完成寸前で結構複雑なので間違えやすいです。

注意すべき点:

・ステップ3の2段目をそろえるときに基本手順の前に1回回す手順が入る。

・いろいろな場面で全体を90度回転みたいなのが出てくるのでそれを忘れないように。

・ステップ4は3つの場合分けを覚える必要があるのと、基本の前に1回回す手順が入るのがポイント。ただし、場合分けは覚えておきさえすれば動かす手順は同じなのがうれしい。

・ステップ6は覚えれば単純なんだけど、ビデオ見返さないとちょっと慣れるまでよくわからなかった。

・ステップ7は基本を5回動かすのが2回もあるので、これは前述の逆手順1回で済ませる方が楽。