第85回情報処理学会全国大会 第5回中高生情報学研究コンテスト
チーム名:TRC
東京都立南多摩中等教育学校
寺内駿くん(5年)
(令和4年度現在)
(2023年3月取材)
ルービックキューブの解き方とその手順を探索するためのデスクトップアプリケーションを開発した。ルービックキューブの数学的性質とパズルとしての性質を、プログラミングを用いて研究した。研究成果に即して手順の探索を行うことで性能を向上させた。完成したアプリケーションはインストーラを作成し、githubに公開した。
※クリックすると拡大します
■今回発表した研究を始めた理由や経緯を教えてください。
中学2年生のころからルービックキューブが好きで、ずっと早く揃えるために練習をしていました。高校生になって、私の学校では「情報」の授業が高校1年生で実施されるため、すぐに御家先生の授業でPythonの存在を知りました。高校生になった時にノートパソコンを買ってもらったことと、Pythonの存在を知ってからほどなくして、ルービックキューブを解くプログラムをPythonで実装しているQiitaの記事を見つけたことで、実際にそのプログラムを自分のパソコンで動かしてみたいと思いました。
そこからは、自分のパソコンにコピペしたソースコードがどのような仕組みで動いているのかを調べ、プログラミングの面白さに引き込まれていきました。
そしてそのまま、これをもっと改良して使いやすく、高性能にしたいと思い、CubeSEの開発を始めました。
■今回の研究にかかった時間はどのくらいですか。
2021年4月23日にプログラムの仕組みを調べ始め、2022年12月24日にCubeSEをGitHubでリリースしました。ルービックキューブそのものに対する知識や、その数学的性質を、群論を通して学んだ期間も含めるならば中2からになります。
■今回の研究ではどんなことに苦労しましたか。
プログラミングが何もわからない状態からのスタートだったため、開発しながら学習するという、普通とは逆の順番だったことが最初の関門でした。
御家先生をはじめ、私の友人にもプログラミングができる人がいたので、初期のころは本当にお世話になりました。プログラミングがちょっとできるようになってからは、アプリのフロントエンドとバックエンドをひとりで開発することが一番大変でした。使いやすいGUIはどのようなものかを考えて、ノートに設計図を書き、PythonのTkinterで画面を作りました。
そしてボタンを押されたときのバックエンドの処理ですが、当初はPython一本で完結させていたのですが、実行速度が遅すぎたため、2021年の夏休み1か月を費やしてC++を修得し、バックエンドの処理をC++の実行ファイルで行うようにしました。そのため、2言語を頻繫に行き来しながら開発を行っており、よく文法が混ざったりしていました。
さらに、開発にあたってその過程で試験的にアプリを配布しフィードバックを得る、という改良しながらの開発というスタイルをとっていたのですが、そのフィードバックを寄せてくれる方を探すのにも苦労しました。
また、アプリの機能自体は比較的容易に実装できるのですが、それを実用に耐えうるレベルにまで昇華させることが一番時間のかかったところです。対照実験を繰り返しながらデータをとり続け、F検定やT検定を用いて客観的に評価を行いました。研究者バイアスの排除に最も気を払い、得られる結論の科学的中立性を保つために実験手法を工夫したりするなど、苦労は絶えなかったです。
■「ココは工夫した!」「ココを見てほしい」という点を教えてください。
開発した機能の1つに、ルービックキューブの状態を入力してもらって、それに対する解き方を表示する、というものがあるのですが、もし入力が間違っているとプログラムは永遠にそろわないルービックキューブの解き方を探し続けることになってしまいます。これを避けるために、入力された情報に誤りがないかを確認しています。そこで使っている関数の1つは、群論によって証明できる事柄を用いています。
余談ですが、ルービックキューブを分解してランダムに組み立てると、およそ12回に1回しか「揃えられる」ルービックキューブは組み立てられません。なので、この関数は非常に重要な役割を持っています。
■今後「こんなものを作ってみたい!」「こんな研究をしてみたい」と思うことがあれば教えてください。
まずは、CubeSEをクロスプラットフォームにすること、そして3×3×3以外のルービックキューブにも対応できるように、機能を拡張していきたいです。
今年は受験生なのであまり熱を傾けられませんが、大学生になったら多くのことをしていきたいです。
※寺内くんの発表は、中高生研究賞奨励賞を受賞しました。