■13.全通り検索のワナ(イラストロジック対策) (2007/12/04)

  「イラロジ」とはイラストロジックのこと。単にロジックと言う場合が多いみたいだけど、「ピクロス」というゲームソフトがあるらしく、そちらの名前もよく聞くという話らしい。私のよく見るサイトにそのイラロジで絵が描かれていて、「どうしても解きたい」というくだらない欲望から始まった。

 ルールはとりあえず身近な漫画であるエムゼロ(叶恭弘先生)の作品中で「ロジック」という名前とルールを知っていたのだけれど、ちょっとやったけど正直メンドイ。で仕方が無いのでプログラマーらしくプログラムで解くことにした。話のネタで神奈川電子技術研究所メンバーにも聞いてみる。

俺:「ねぇ、ロジックって知ってる?」
友:「ロジックってどのロジック?w」

 こんなやり取りが数回。どうやらイラストロジックといえば通りがいいみたいだね。ルールのほうを説明してみると、とりあえず下記のような図があるんですよね。コレを白と黒で塗りわけて絵を完成させるという物。

 で左の上に「5」と書いてあるけど、コレは一番上の行で5個連続で塗る部分があるということ。三行目に「3」と「1」が書いてあるけど、これは三個連続で塗る部分と一個だけ塗る部分があるということ。ちなみに「3」と「1」の間は一個以上空けないとダメ。それらを縦横で矛盾の無いように塗り分けると下記のようになります。

 とかためしにやっているうちになんか簡単に解けるようになってしまって来たのですが、なんかもうプログラムすること自体が目的になっているので、強引に進めてみることにします。

 プログラムで全通り検索をやる場合、マスの数から言って相当莫大な数の計算回数をこなすことになるっぽいですね。ちょっと概算してみたたら、全部で10x10なのでマスの総数は100マス。100マスそれぞれ白と黒がある。なので全部で2^100(2の100乗)なので全部で

1267650600228229401496703205376通り。

ちょっと桁が多いのでカンマをつけましょうか

126,7650,6002,2822,9401,4967,0320,5376通り

まだわかりにくいので単位入れましょうか

126穣7650(じょ)6002垓2822京9401兆4967億0320万5376通り

まだ分かり難いので対数にすると

約 1.26x10^30(1.26x10の30乗)通り

 らしいです。なんかカプコンの「ギガウィング」というゲームでも出てこなそうな数字になってしまいましたね。結構簡単に見えて、意外と難しいことは数学の世界ではしょっちゅうあります。数学という物を作った先人たちに感謝せずには居られませんね。

 さて、さすがに126穣回も計算したらたぶん私のcore2duoでも死ねそうですね。それよりもC#で一番大きい整数を確保できる型が64ビット(9223372036854775808~-9223372036854775808。今回は正の方向にのみ100ビット)なので、通常の方法では試行回数すらカウントできませんね。

 というわけでまずは5x5のマスだと何回になるか一度計算してみました。5x5=25なので

2^25=33554432通り

 =3355万4432通り

 お!コレならいけそう!!というわけで時間のアタリをつけるために、試しに5x5でやってみる。

 開始時間と終了時間をキッチリメモる機能をつけてた。おかけで時間が正確に解る。ドットネットフレームワークスを開発したマイクロソフトと私のテクに乾杯だ。というわけで計算時間は

5時間12分12秒

つまり18732秒。ということは一秒あたり約1791通りの試行ができるということですね。それをモトに10x10の場合の計算の時間を推測すると、

1267650600228229401496703205376÷1791≒
707789279859424568116528869[秒]

≒196608133294284602254591[時間]
≒8192005553928525093941[日]
≒22443850832680890668[年](365日計算)
2244京3850兆8326億8089万0668[年]

 というわけで私のCore2DuoE6600のパソコンを用いると約2244京年で10x10のイラストロジックの全通り検索が終了します。ちなみに手で解くと約5分で解けます。つまり手で解くと約2244京年の時間の節約になるということになりますね。というわけでイラストロジックの全通り検索はやめましょう!!

 ※確かイラストロジックを解くプログラムを作るはずでしたが、途中でどうでもよくなったのでやめました。
※ちなにみ表示ルーチンを省けばもうちょっと軽くなるかも知れませんが、10倍や100倍早かった所で高が知れていますね。

神奈川電子技術研究所トップへ

(c)神奈川電子技術研究所