geta1972TweetPocketCheckナンプレの基本インターフェイスを前回構築したんですが、やはり自動回答と自動問題作成機能を作らないとチャンとしたゲームとは言えないでしょう。そこで、今回は問題を自動で回答する、機能に挑戦してみました。あり、今回は初級問題にのみ対応できるプログラムになっています。前回のおさらいhttp://wordpress.ideacompo.com/?p=7489前回は、ナンプレの基本表示部分と、入力処理、回答を入力した後の正解チェック機能を作ってます。基本的にjavascriptだけで動作する事を目的にしてますが、問題読み込み機能でajaxを使っているので、ファイル表示では動作しないので、読み込み機能を使うときは仮想環境か、サーバーに配置して使ってください。「初級の自動回答機能」として、以下の処理を実現してます。チェックを複数回繰り返す反復処理ソースコード今回の変更点は「numberplace.js」のみだけですが、とりあえず全てのソースコードを載せておきます。//指定エレメントでストップする。//targetの中心座標にelmの中心座標を移動する。pos={x:0,y:0};do{//指定エレメントでストップする。pos;};//targetの中心座標にelmの中心座標を移動する。]1234567891011121314151617181920212223242526272829303132333435363738394041424344454647[{"name":"sample-1","data":"--7---2-----6-4---4----2--8-----1--52---5--1---6-8--7--8-------1--59-8-372-4-----"},{"name":"sample-2","data":"--1---3-----9-1--423---7-69--8-6--71---------19----------8-9--6---3---4-42-------"},{"name":"sample-3","data":"--2---6-----3-895-7-8--5-------56--8-7--9--2--8----5-----92----5-3----------431--"},{"name":"sample-4","data":"--4---3---9---867-12---9--8------725--------49---2-------5----7----6-94-2-8-1--3-"},{"name":"sample-5","data":"--2---5---86---------5--71-89--5---2--4-8--3-2--------4----2---7---4--8---9--826-"},{"name":"sample-6","data":"--7---3--8------4956------12-3-9-----7---3--6--5--1----8-1--5----4----9-71-2-----"},{"name":"sample-7","data":"--9---6--4--2--9------------754--------9-2-8-6------25-4----1979---3-----1--8----"},{"name":"sample-8","data":"--6---1--4--1-8-597--2------5-9--4-------6391-67-4-2------7---81------7----4-----"},{"name":"sample-9","data":"--6---5--3-1-8--699----5-1-5--6--8----8---1---6-87---------1953---496----1------2"},{"name":"sample-10","data":"--9---6--61-----2--5--3-1---7-5-826--62--4--------14-52---6--5-18-----9-9----5---"},{"name":"sample-11","data":"6--4-----5----7-9--1--8-3----27----4-5-----6-1----95----9-7--4--8-3----2-----6--3"}]解説index.htmlに解凍ボタンを付け加えています。その影響でJS側でボタンを押したイベントを追加してますが、大した処理でないので、ここは解説カットします。numberplace.jsの中の”$$.solve”という関数が今回のポイントですが、少し大きなプログラムになってしまったので、大まかなフローは下記のとおりです。仮登録されている数値のうち、1つしかないものを確定数値として、反映させる。完了していない場合、3番に戻ってさらに処理をすすめる。この手順で、初級レベルの解凍はできます。レベルの高い問題になると、空欄を残してプログラムが終了してしまうので、この点は次回以降に対応する予定なので、認識しておいてください。ポイント解説の4番について、すこし分かりにくいので、図を用意しておきました。分かりにくいですが、どうしてもわからない場合は、メールかコメントください。別途解説したいと思います。横列を例にします入れられる数値を全て書き出す1が一つしかないので確定これを繰り返す上記の様な処理を繰り返し行うことで、初級レベルは空欄がどんどん埋まっていきます。上級レベルに対しての課題これでも解答できない問題は、もう少し別の判定を行わないといけません。書いておくと、3×3マスの縦と横を1つのユニーク値として、他のブロックに対して優先順位を付けていき、不要判定を行なって、仮登録値を削除していくことで、確定数字を割り出すという内容です。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。