【研究発表】Python × ルービックキューブ = 練習サポートツール
こんばんは。
自立に向けてとにかく手を動かしたいとっとです。
わが家の長男(小2)のルービックキューブ熱が少し落ち着いてきたものの、とっとのPython熱が冷めやらず(最近なんだかんだでPythonのプログラミングをしていないせいでしょうかw)、
Python × ルービックキューブ
をテーマに、ルービックキューブの解法練習をサポートするツールをつくってみました。
着想からしばらくは手がつかず、3/25に着手→4/9にひと通り完成しました。
やってて少し学生時代を思い出したので、齢40を目前にしたおっさんが、15年ほど昔をおもいだしながら大学生の研究論文っぽくご紹介してみたいとおもいます。
それではどうぞ。(3,500文字弱あります)
Abstract(概要)
ルービックキューブという立体パズルは、1970年代にハンガリーの建築学者によって考案されたもので、各面異なる色で計6色に配色された立方体を基本形としている。本立方体は各面が3×3の9マスに分割され、分割面を境に3軸に駆動させることでマスごとに配色を変えることができる。
ルービックキューブは、配色が変わった各面の色を、分割面を駆動させることで面ごとに同色にそろえることを主たる目的としている。
ルービックキューブの配色パターンは4325京を超え、その中の任意の配色パターンから各面の色が同一に揃ったパターンまでの駆動手順として、いくつかの解法があることが知られている。
本研究では、そのなかでもポピュラーなCFOP手順におけるOLLステップの学習をサポートするツールを開発した。
Introduction(導入)
CFOPとは
CFOPとは、Cross → F2L → OLL → PLL の4つのステップの頭文字をとったもので、比較的ポピュラーな解法として知られている。以下に各ステップを説明する。
Cross
図1のように、中心のマスが白の面を底面にし、クロスに揃える。
F2L(First 2 Layer)
Cross完了後、下側の2段を揃える。
OLL(Orientation of Last Layer)
F2L完了後、上面の黄色マスを揃える。
PLL(Permutation of Last Layer)
上段の側面を揃える。
スコープ
現在わが家の長男(小学校2年生)は、上述のCFOPによる解法について学習を進めている。現時点の習得状況を以下に示す。
Cross:習得済。
F2L :習得済。
OLL :57ケース中、20ケース習得済。
PLL :21ケース中、21ケース全て習得済。
本状況より、もっぱらOLLの未習得ケースを学習中である。
学習方法としては、以下のようなF2L完了後の上段の黄色マス配色と、それに対応したOLL手順のペアを、全57ケース分について紙で印刷して用意しておく。
F2Lが完了した時点のルービックキューブ上段の黄色配置から、OLL57パターンのどれに該当するかを紙をめくって照合し、該当する手順を実施しながら学習する、というスタイルを導入している。
そこで本研究では、上記紙を用いた学習の効率を向上させるためのコンピュータ支援についてフォーカスした。
Purpose(目的)
紙をめくってOLLパタンを検索する場合、検索に時間がかかること、また紙がボロボロになってきていることなどを鑑み、この点を改善する。
本論文では、F2L完了後のルービックキューブ上段の様子をカメラで撮影し、コンピュータに照合させることで、即座に次に実施すべきOLL手順を検索してユーザに知らせ、学習効率を高めることを目的とする。
Specification(仕様)
今回開発したOLL手順学習サポートツールの仕様を以下にまとめる。
Production(制作物)
上述の仕様に基づいて開発したOLL手順学習サポートツールの主要諸元を以下に列挙する。
画面構成
PythonのKivyというライブラリを用いて画面を構築したので、以下に示す。
左側のスマホ画面の赤枠内に、F2Lが完了したルービックキューブの上面を映すことで、黄色マスの判定が行われる。その結果をもとに、OLL57手順のうちどの手順に該当するかを即座に判断し、結果を右側の白いエリアに表示する。
判定結果例
実際に判定させてみた結果を以下に示す。
上記の例では、カメラに映したルービックキューブの中段一列が黄色マスであることを正しく判定し、OLL手順に該当があるか照合した結果についても右側に正しく表示されていることが分かる。
判定の様子
ツールに判定させている様子を動画に撮ったので、参照されたい。
詳細説明
本ツールの詳細な判定ロジックについては以下の文献にまとめた。細部が気になる際はこちらを参照されたい。
Conclusion(結論)
ルービックキューブのOLL手順学習に際し、これまで紙をめくって検索していた点について、本研究では学習効率を高めることを目的に、コンピュータによる画像処理を用いたツールを制作し、検索速度を向上させた。
今後の課題および展望を以下に述べる。
Acknowledgements(謝辞)
本研究を進めるにあたり、日々根気強くご指導いただいたGoogle教授、またわたしが本活動に注力するにあたって、双子の面倒を常に見ていただいているかっか、さらには本テーマを提供してくださったわが家の長男に、深い感謝の意を示します。ありがとうございました。
・・・いかがでしたでしょうか?
たしか論文ってこんな感じだったかなぁ・・と思い出しながら、楽しく記事を書かせていただきました。
ちょっとマニアックですが、素人研究、ぜひ自前ブログの方も見に来ていただけるとうれしいです。
最後まで読んでいただき、ありがとうございました!
独学中のPythonプログラミング体験記です。もしお時間ありましたら、ぜひこちらも覗いてやってください!