パズルを群論で味わう
前置き
iPXの砂子です。記事投稿は2回目です。ネタがあんまりないのでこの頃考えたことを徒然に書いてみた。
パズル
暇つぶしとして数独を解いてみたり、プログラミングの課題としてエイト・クイーンを扱ってみたり、RPGのミニゲームとしてライツアウトを解いてみたりとパズルに触れる機会は多い。そして、かなりの頻度で次の疑問をもつ。
体系的に解けないだろうか?
試行錯誤してパズルを解くことは楽しいのだが、時節その行動が知性のないものとして認識する瞬間がある。なぜだか許せない。パズルのルールを理解して、即座にそれに則った解法で淡々と解けないだろうか?
まあ、それは天才にしかできないのだろうが。。。
群論
ずいぶん前に購入した本にパズルの性質を数学で解き明かすというものがある。

群論の味わい ?置換群で解き明かすルービックキューブと15パズル?
- 作者: David Joyner,川辺治之
- 出版社/メーカー: 共立出版
- 発売日: 2010/12/10
- メディア: 単行本
- クリック: 15回
- この商品を含むブログ (2件) を見る
この書籍に依れば幾つかのパズルは置換群という数学の分野で研究されている。
- ルービックキューブ
- 15パズル
- ライツアウト
また、群論でパズルを理解するためにSageというソフトウェアを利用していた。
Sage
紹介
オープンソースのMathematicaに似た数式処理システム。簡単に触った感じではPythonをつなぎとして多数の数学ソフトウェア・ライブラリを組み合わせたシステムのようだ。
導入
2つの形式を試した。お堅いソフトウェアなのにどちらもブラウザをUIとしている。やはりこれが時代の流れか。。。
Online
ユーザ登録すれば使える。制限などは調べてない。
ゲストOS
RedHat系OSにChromium OSが入ったゲストOSがダウンロードできる。あとはVirtualBoxで実行。紹介にもあるとおり、かなりの数のコンポーネントがあるのでこうじゃないと環境構築は絶望的なのではないだろうか?
HelloWorld!
ゲストOSを起動し、慣れないChromiun OSの操作に苦戦しながら書籍にあったルービックキューブ関連のコマンドを入力。
from sage.groups.perm_gps.cubegroup import * RubiksCube().move("R2U2R2U2R2*U2").show3d()
下記出力を得る。
まとめ
プログラムでパズルを解き、何らかの答えを得たとしてもそれは一面的なものだろう。ループと条件分岐を組み合わせれはパズルは解けるかもしれないが、それは対象を抽象化し理解していない。
実際の開発でもプロジェクトの概念(クラス)を抽出する作業をチームで行うにしても、自己が理解する概念以上のことは抽出不能である。プロジェクトが扱う専門領域のエキスパートと共同作業することにより相互補完はできるが、システムに落とし込む作業は残る。
いつか非の打ちどころがないほどその概念を理解し、体系立て、それをプログラミングできるような日が来るのだろうか?そのために必要な努力とはなんなのか?そんなことを夢想してみる。