読者です 読者をやめる 読者になる 読者になる

iPX社員によるブログ

iPX社員が"社の動向"から"自身の知見や趣味"、"セミナーなどのおすすめ情報"に至るまで幅広い話題を投下していくブログ。社の雰囲気を感じ取っていただけたら幸いです。

パズルを群論で味わう

前置き

iPXの砂子です。記事投稿は2回目です。ネタがあんまりないのでこの頃考えたことを徒然に書いてみた。

パズル

暇つぶしとして数独を解いてみたり、プログラミングの課題としてエイト・クイーンを扱ってみたり、RPGミニゲームとしてライツアウトを解いてみたりとパズルに触れる機会は多い。そして、かなりの頻度で次の疑問をもつ。

体系的に解けないだろうか?

試行錯誤してパズルを解くことは楽しいのだが、時節その行動が知性のないものとして認識する瞬間がある。なぜだか許せない。パズルのルールを理解して、即座にそれに則った解法で淡々と解けないだろうか?

まあ、それは天才にしかできないのだろうが。。。

群論

ずいぶん前に購入した本にパズルの性質を数学で解き明かすというものがある。

群論の味わい ?置換群で解き明かすルービックキューブと15パズル?

群論の味わい ?置換群で解き明かすルービックキューブと15パズル?

この書籍に依れば幾つかのパズルは置換群という数学の分野で研究されている。

また、群論でパズルを理解するためにSageというソフトウェアを利用していた。

Sage

紹介

オープンソースMathematicaに似た数式処理システム。簡単に触った感じではPythonをつなぎとして多数の数学ソフトウェア・ライブラリを組み合わせたシステムのようだ。

www.sagemath.org

導入

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()

下記出力を得る。 f:id:ipx-writer:20150419000406p:plain

まとめ

プログラムでパズルを解き、何らかの答えを得たとしてもそれは一面的なものだろう。ループと条件分岐を組み合わせれはパズルは解けるかもしれないが、それは対象を抽象化し理解していない。

実際の開発でもプロジェクトの概念(クラス)を抽出する作業をチームで行うにしても、自己が理解する概念以上のことは抽出不能である。プロジェクトが扱う専門領域のエキスパートと共同作業することにより相互補完はできるが、システムに落とし込む作業は残る。

いつか非の打ちどころがないほどその概念を理解し、体系立て、それをプログラミングできるような日が来るのだろうか?そのために必要な努力とはなんなのか?そんなことを夢想してみる。