第6講 数独作成アプリVer.1にライン排除確定を組み込む
第6話 復元について
復元は、局所リスト構造解析の場合と異なる点があります。
局所リスト構造解析による変更を元に戻す対象は、
上の水色セルのリスト構造から、
可能な数字を入れた場合に影響の及ぶオレンジのセルです。
つまり、複数のセルからなるセル群です。
それに対して、ライン排除確定による復元の場合は、
上の図の1をどこかに入れた場合に発生するライン排除確定セルの
赤いセルのみを復元すれば良いのです。
つまり、単セルの復元です。
上に図の場合は、どこに3カ所のどこに1を入れても、
赤いセルが確定できますが、
実験によるとどのセルの段階の1による影響なのかを考慮に入れないと、
復元が上手くいきません。
(その実験というのは第7話と第8話に述べてある
完成したつもりのVer.2による1200題生成ソフト、1200題適正検証ソフト、
Ver.2によって1200題を作成するソフトによる実験です。
これらの実験については、第9話で詳しく説明します。)
その理由を説明してみましょう。
私は、セルの入力順を表すgを時間で比喩します。
失敗してしまうのは、過去においてセルに入力した数字がダメだったからです。
ですから、
そこまで時間を遡る=正確にはgを遡らなければならないのです。
よく、SF映画で恋人が殺されてしまった場合に、
殺される時間の前に戻り、
デートコースを変更して、恋人が殺害されるのを防ぐというような話があります。
でも、タイムマシンという映画では、別の理由でまた殺されてしまいます。
何度過去に戻って殺人を止めようとしても、
毎回異なる原因で結局は殺害されてしまうということになっていますが。
数独の場合には、失敗の原因となったセルまで遡り、
やり直せば必ず成功します。
この方法は、もちろん試行錯誤法=トライ&エラー=仮定法=仮置き法=背理法で、
将来においては捨て去る方法ですが、
最終バージョンに行くまでは、
過去に遡ってやり直す方法をとらざるを得ません。
確定法のみで解かせるにはまだまだ様々なテクニックを組み込まなればならないからです。
さて、話を戻しましょう。
入力順36=時間36において1を入れたために
入力確定セルの赤いセルが発生します。
入力順14または28の段階では、
1が3個未満ですから、
入力確定セルは発生しません。
つまり、時間36においてはじめて確定できたのでして、
時間14と28の段階では確定セルは発生していません。
復元が必要になるのは、
赤いセルに1を入れたために
将来(時間38以降)において破綻する場合です。
するとどこまで遡ってやり直せば良いかと申しますと、
時間36です。
どの時間段階=どのgのときが原因で破綻したのかを記録しておかないと、
復元=修復が上手くいきません。
そもそも復元プロシージャhukugenにおいて、
時間を考慮に入れてDim hth(80, 8, 8) As Byteを導入したのです。
どの時間帯のセルに影響によってどのセルが変更されたのかを記録する配列でした。
今回もこれを使えば上手くいくはずでしたが、
実験結果は失敗となりました。
今も原因は分かっていませんが、
ライン排除によって確定出来るセルは、
常に、単セルのみですから、
時間だけ記録する配列Dim rh(80) As Byteを用意すれば、
十分ですよね。
もちろん、赤いセルの座標はy(g + 1),x(g + 1)に記録しておけば良いですね。
eclipse c++ 入門
魔方陣 数独(ナンプレ)で学ぶ VBA 入門
数独(ナンプレ)のシンプルな解き方・簡単な解法の研究
vc++講義へ
excel 2013 2010 2007 vba入門へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
eclipse java 入門へ
excel 2016 vba 入門へ
小学生からエンジニアまでのRuby入門へ
本サイトトップへ