数独4:尾崎将司かアリソンか
[2006年07月25日(火)]
前回の記事ではどんなに難しい数独問題でも瞬時に解いてしまう味気の無いプログラムを公開した.
そうしたら,よっし〜さんから「コレを使ってしまっては頭の体操にならないのでは?」というコメントを頂いた.
確かにそうだ.あのプログラムを作成するにあたって私はとっても頭の体操になったが,数独ファンにとっては何の役にも立たないシロモノだ.
ところで,ゴルフをカジっている方なら必ずご存知の「尾崎将司プロ」と「チャールズ・ヒュー・アリソン」.
ジャンボ尾崎プロは文句無く日本が生んだ最強のゴルフプレイヤー,アリソン氏は日本では廣野ゴルフ倶楽部をはじめ幾つもの名コースを設計して「アリソンバンカー」という名前も残す著名なゴルフ場設計家.
どちらが凄いか?とは比べることが出来ないが,アリソン氏が設計したコースに尾崎プロが挑むという構図を鑑みるに,私も分野は違えど設計者の端くれなのでアリソン氏に共感を覚える.
っということで,今回は数独に関してもアリソン氏を目指す.
即ち,『数独の問題を自動的に作成する』ことを目指す.
問題を作成するにあたって数独問題の要件を整理するとこんな感じ.
概要は下記.
違う方法で問題を解く必要があるが,ロープの例えだと各段で「9」のラベルが付いたロープから手繰り寄せるようにすればお手軽に実装できる.
方針が決まったので早速コーディング.
前回の記事を作成する際にある程度Javascriptのお作法に慣れたので教科書とニラメッコの時間は結構減ったが思いのほか時間が掛かった.
さて,問題作成フォームは以下.「作成」ボタン左のフォームに数字を入れてボタンを押してください.
コレで「いちはちじゅうのもくもく」では無いが,「81マスに向かって黙々と解く」環境が出来上がった.
毎日100個ずつでも問題を作成することが出来る.
とは言え,javascriptで作成したデモ環境なので以下の使用制約がある.
・数字が埋まる数を「34」以上に制限してある.
・ブラウザの機能によって途中で解析を中断せざるを得ない場合がある.
どちらもjavascriptで書いた故の性能制約なので仕方が無い.
他の実装方法ならばこの制約を気にせず膨大な問題を作成できる.
あと,IEではなくFirefoxで動作させると探索の過程が解かりやすい.IEだと過程の値は表示せず,処理結果しか表示しないようだ.
ここまで出来れば問題本の作成くらいチョチョイのチョイだが,ひとつだけ観点が抜けている.それは『問題の難易度』の観点だ.
これまで計算機にしか出来ない乱暴な方法ばかり採用してきたツケが出てきてしまった.
難易度を判定するには人間の思考過程を模した方法,即ちgodgeoさんのインテリジェントアプローチを経なければならない.
このアプローチを実装するにはデータ構造から処理の方法までイッサイガッサイ再検討が必要だ.ヒラリンと軽く簡単には作れない.
っということで,私の数独検討はコレにて終了.
知的アプローチはgodgeoさんにお任せしようと思う.
後記:
4回に渡って数独に関する記事を書きましたが,今までで最高の熱中度でした.そして読者の方々にはどう映ったかは解かりませんが書き終わって最高の達成感です.
どの位熱中したかというと,会社では毎日ランチタイムにプログラミングして通勤電車内ではコードのプリントアウトを眺めて車中デバグ,家に帰ってはA子との会話はナマ返事にとどめて再びプログラミング,更に記事の付け合せ的なネタを考えてはインターネットの世界を駆け巡り書いては消しの繰り返し,という感じでした.
元々私は熱しやすい性格ですが,火をつけて下さったのは勿論godgeoさん.何をおいても感謝申し上げたい.
また記事に使ったコードも多くはgodgeoさん記事のパクリでプログラミングの初期段階で悩む所をかなり流用させていただいた.ヒトのフンドシで相撲を取っているようで申し訳なく思ってしまいます.
こんな興奮をブログ上で味わえるとは思いませんでした.改めてGDOさんに感謝です.
そうしたら,よっし〜さんから「コレを使ってしまっては頭の体操にならないのでは?」というコメントを頂いた.
確かにそうだ.あのプログラムを作成するにあたって私はとっても頭の体操になったが,数独ファンにとっては何の役にも立たないシロモノだ.
ところで,ゴルフをカジっている方なら必ずご存知の「尾崎将司プロ」と「チャールズ・ヒュー・アリソン」.
ジャンボ尾崎プロは文句無く日本が生んだ最強のゴルフプレイヤー,アリソン氏は日本では廣野ゴルフ倶楽部をはじめ幾つもの名コースを設計して「アリソンバンカー」という名前も残す著名なゴルフ場設計家.
どちらが凄いか?とは比べることが出来ないが,アリソン氏が設計したコースに尾崎プロが挑むという構図を鑑みるに,私も分野は違えど設計者の端くれなのでアリソン氏に共感を覚える.
っということで,今回は数独に関してもアリソン氏を目指す.
即ち,『数独の問題を自動的に作成する』ことを目指す.
問題を作成するにあたって数独問題の要件を整理するとこんな感じ.
- 81個のマス目のうち幾つかのマス目が埋まっている形になる
- どんな方法で解いても同じ答えに帰着する
概要は下記.
- 予め幾つ数字が埋まった問題を作成するか決めておく.
- 適当な問題を解く.
- 乱数を用いて解いた問題からどのマス目を問題にするか決める.
- 作成した問題を違う手法で解く.
- 2種類の解答が同じだったら終了
- 異なったら適当な問題を解くトコからやり直し
違う方法で問題を解く必要があるが,ロープの例えだと各段で「9」のラベルが付いたロープから手繰り寄せるようにすればお手軽に実装できる.
方針が決まったので早速コーディング.
前回の記事を作成する際にある程度Javascriptのお作法に慣れたので教科書とニラメッコの時間は結構減ったが思いのほか時間が掛かった.
さて,問題作成フォームは以下.「作成」ボタン左のフォームに数字を入れてボタンを押してください.
コレで「いちはちじゅうのもくもく」では無いが,「81マスに向かって黙々と解く」環境が出来上がった.
毎日100個ずつでも問題を作成することが出来る.
とは言え,javascriptで作成したデモ環境なので以下の使用制約がある.
・数字が埋まる数を「34」以上に制限してある.
・ブラウザの機能によって途中で解析を中断せざるを得ない場合がある.
どちらもjavascriptで書いた故の性能制約なので仕方が無い.
他の実装方法ならばこの制約を気にせず膨大な問題を作成できる.
あと,IEではなくFirefoxで動作させると探索の過程が解かりやすい.IEだと過程の値は表示せず,処理結果しか表示しないようだ.
ここまで出来れば問題本の作成くらいチョチョイのチョイだが,ひとつだけ観点が抜けている.それは『問題の難易度』の観点だ.
これまで計算機にしか出来ない乱暴な方法ばかり採用してきたツケが出てきてしまった.
難易度を判定するには人間の思考過程を模した方法,即ちgodgeoさんのインテリジェントアプローチを経なければならない.
このアプローチを実装するにはデータ構造から処理の方法までイッサイガッサイ再検討が必要だ.ヒラリンと軽く簡単には作れない.
っということで,私の数独検討はコレにて終了.
知的アプローチはgodgeoさんにお任せしようと思う.
後記:
4回に渡って数独に関する記事を書きましたが,今までで最高の熱中度でした.そして読者の方々にはどう映ったかは解かりませんが書き終わって最高の達成感です.
どの位熱中したかというと,会社では毎日ランチタイムにプログラミングして通勤電車内ではコードのプリントアウトを眺めて車中デバグ,家に帰ってはA子との会話はナマ返事にとどめて再びプログラミング,更に記事の付け合せ的なネタを考えてはインターネットの世界を駆け巡り書いては消しの繰り返し,という感じでした.
元々私は熱しやすい性格ですが,火をつけて下さったのは勿論godgeoさん.何をおいても感謝申し上げたい.
また記事に使ったコードも多くはgodgeoさん記事のパクリでプログラミングの初期段階で悩む所をかなり流用させていただいた.ヒトのフンドシで相撲を取っているようで申し訳なく思ってしまいます.
こんな興奮をブログ上で味わえるとは思いませんでした.改めてGDOさんに感謝です.



