Top に戻る

数独 ナンバープレース

数独(ナンバープレース)解法プログラムを作って見ました。
「解法」などと言う難しいことは知らなかったので、コンピュータを酷使する方法で実現しました。
手順は次のとおりです。
  1. 数値の決まっていないセルに指定可能な値をすべて求める。
  2. 指定可能な値を一つしか持っていないセルには「指定可能な値」を割り当てる。
  3. 指定可能な値が一つしか無いセルが無い場合2以上の「指定可能な値」を持つセルに 指定可能な値の小さい方(理由はない単なる決め打ち)を割り当てる。
  4. 上記(1〜 )を繰り返し、「指定可能な値」がルールに反する(割り当てられない)場合に 2以上の「指定可能な値」を持つセルまで戻って値を変更する。
    戻るときに指定値をクリアーする。
  5. 「指定可能な値」は数独の特性から最大は9である。
    9 までのすべての「指定可能値」を対象にすれば何も指定していない場合にも 解を出せる。
  6. サーバに負担が掛かるのでセルの変更回数を 3000 回に制限しています。
    全部とは言えませんが、某社の電子辞書にある数独問題の上級も解けます。
    何もし指定せずに実行させるとすぐに答えが出るのに(いつも同じです)、中々答えのでない組み合わせがあります
最初に数値を直接入力する html を作ったところ、「面倒くさい」と言われたので数値を選択する html も作ってみました。 入力時点では数値チェックは入っていないので、実現不能なパターンも拒否していません(CGI ではチェックしています)。
  1. 数独データの数値を選んで「解く」をクリックして下さい。
    Select を使用したタイプです



  2. 数独データの入力して「解く」をクリックして下さい。
    TEXT 入力で実行しています。マウスとキーを使用すればこちらの方が使いやすいと思うのですが、所詮個人差です。



  3. 数独解法プログラム
    CGI で使用しているプログラムです。
    このプログラムで使用しているcgiの原型を置きます。
    文字コードは「ISO-2022-JP」です。直接ダウンロードすると読めない部分があるかも知れません。
    Linux で作成しています。次の様に直接実行できます(Debug 機能です)。



Top に戻る

© ForWhom.jp