2012年2月22日水曜日

Place Number Table

 Candy table を 9×9 の二次元マトリックス can ( i , j )で表す。このマトリックスの作り方は前に述べた。
             http://numberplace.blogspot.com/2009/06/23.html

 場所の候補を表す マトリックスを Place Number Table で定義する。これには、Block Number Table ,  Row Number Table , Number Column Table の3種類がある。それぞれ、数字の入る場所の番地の候補を表している。

 Fig .5 の問題に対して、このマトリックスを示せば次のような Diagram になる。


Fig. 7  Block Number Table




Fig. 8  Row Number Table



                                                              Fig.  9   Number Column Table


 ナンプレを解くには、
   ① 数字をきめて、その数字が入る場所を探す か
   ② 場所をきめて、そこに入る数字の候補を探す かのどちらかである。

 場所を探す①ときには、Place Number Table ( Fig. 7 , Fig. 8 , Fig. 9 ) を使う。

 数字を探す②ときには、Candy Table ( Fig. 6 ) を使う。



2012年2月21日火曜日

Candy Table

基本的なナンプレの解法を説明する前に、具体的なナンプレを例にとり、構造解析に必要なDiagram を示しておこう。

 例題として、「ニコリ名品100選」の1番を取り上げよう。


  
                  Fig. 5 Row Column Diagram

 まず最初に、Fig.5 の空白セル( Empty Cell ) のそれぞれに入る候補の数字を小文字で挿入すれば、Fig. 6 で表される。



                    Fig. 6  Number Candidate Diagram

 この候補の一覧表を Candy Table と呼ぶこととする。

2012年2月19日日曜日

ナンプレの構造

ナンプレ( number place )は、構造的には、数字と場所を探すパズルである。数字は1から9までの9種類、場所は、9個の block、row、column のセルにそれぞれ 9ヶ所ある。

 この4つの number、block、row、column を2次元座標で表現する。( row , column ) 座標で表したDiagram ( Fig.1 ) が、通常のナンプレ本に表れる Diagram(盤面)である。

Fig. 1  Number place diagram

 場所を示す番地を、block ,  row , column 毎に、Fig. 1 の 1 から 9 までの数字に対応して表す。番地であることがわかるように、数字の代りに、a b c d e f g h i を使うことにする。

 例えば、 ( 2 , 3 ) に対応する場所は、block-number 座標では、B1-f となる。同様に、 row-number 座標では、R2-c 、number-column 座標では、 C3-b である。

 上の Diagrum をそれぞれの座標をもつ Diagram に変換すると次のようになる。


Fig. 2      Block-Number Diagram



Fig. 3    Row-Number Diagram


Fig. 4    Number-Column Diagram


    最初は慣れていないので、わかりづらいが、やがてナンプレ解法の構造が容易に理解できるようになるだろう。


2011年11月14日月曜日

Search macro

 Search macro は、次の 3種類に大分類される。

(1) Basic search
    Single candidate を探し、セルの値を決定するマクロで 4種類からなる。

    ① B_search  Single candidate in Block
    ② R_search  Single candidate in Row
    ③ C_search  Single candidate in Column
    ④ M_search  Single cell in any digit

(2) Deform search
   Candidate を logical な方法で、消去する。よく eliminate が使われるが、ここでは doformを使う。

   中分類で、23種類の deform macro が登録されている。

  V、W, Q, G, P, Φ、Δ、 K, S、 Ξ、 H、Ω、Y, Π、Γ、Λ
  L, T, U、N, J, O, F, I, J, A 
 
  小分類では、さらに 3個の deform macro に分かれる。
 
  例えば、 V_deform は、Vb_deform、 Vr_deform, Vc_deform よりなる。

 (3) Combine macro
  複数の deform macro の組み合わせた deform macroで 小文字で表す。
  ”v”、”q”、によって、複数の変形と複数の探索を行う。
  ”q”の時には、"vq"、"wq" の変形をおこなう。

 探索の方法(search_macro)の紹介は「ナンプレの構造」を使って次回以降説明します。


2011年10月23日日曜日

Ranking List

   現在使っている数独のレベル表示
      26 Stratage Levels  presented by Ryuzen ; Numberplace Ranking Program

① Beginner         B(1)

② Very Easy       +R(2)、C(3)

③ Easy          + M(4)

④ Cute          +V(5)

⑤ Sweet         +W(6)

⑥ Lovely         +Q(7)

⑦ Smart         +G(8)

⑧ Ladybird       +v(31),w(32)

⑨ Pleasant                    +q(33)

⑩ Comfort       +g(34)

⑪ Honeybee      +P(9), +Φ(10) +Ξ(13)

⑫ Healthy        +p(35) +φ(36) +ξ(39)

⑬ Joyful         +S(12) +K(11) +s(38) +k(37)

⑭ Satisfy         +Y(17) +y(42)

⑮ Dream         +H(14) +Ω(15) +h(40) +ω(41)

(16) Dragonfly       +L(18) +T(19)

(17) Beetle         +U(20) +u(45)

(18) Thunder        +l(43) +t(44)

(19) Nightmare       +N(21) +O(22) +J(23)

(20) Pain          +n(46) +o(47) +j(48)

(21) Fear          +F(49) +Z(25) +I(26)

(22) Death         +f(49) +z(50)  +i(51)

(23) UFS          +Γ

(24) Birdy          A

(25) Eargle

(26) Albatoross

 
   

2011年10月21日金曜日

A search memorandum (3)

 numk=1 の a0 の試行が終了すると、次の段階へと移る。

 numk=2 になったとき、klevel=1  であれば、  a0 で破綻、逆に b0 は決まり。
              klevel=2  であれば、 a0   b0   ともに健全、 b0 で試行。

 a0 で破綻の場合、klevel=1 であるので、まだ新しい候補 a1、 b1 は読み込まれていないので、当然 a1="" である。

 この時、 b0 は決まりであるので、 Sheet  1 のDIAGRAM に b0 を代入、これを元の問題とするために、次の 4つのことをする。

 ① b0 の入った問題を新しい出発点とするため、 transfer_A_to_C  で C に移す。
 ② numk=1 に戻す。
 ③ Sheet 9 の D25:K25 の候補の数字を Erase する。
 ④ これまで、求まった解の数 numa をつなげる。ippatsu  の contrepeat に返る。変わっていないのは、 klevel だけであり、今後の仮定回数にプラスされる。

 klevel=2 になっている場合、 a0 がまだ生きている。したがって b0 の試行を行う。
 klevel=2、 numk=2 の場合、a0 b0が残っており、次のステップ numk=3 に進む。

  
 

2011年10月20日木曜日

A search memorandum (2)

new_class_search に klevel=1, numk=1 で入った時、まづ a0 を用いて計算を開始する。numk=numk+1 で numk=2 にして、 ippatsu にもどり、探索計算を行う。

その結果は次の 3ケースに分かれる。

① a0 の仮定だけで、msd を実施、final_answer_check において、 msg="Conouer " となった場合。唯一解の場合には、exit sub とする。

② a0 の仮定で破綻した場合。can ( i, 5)=0  となる場合で、stopflag="stop" にする。この後、新しい候補を求めないで、 klevel=1  のまま new_class_search に戻る。マクロの中での判定は、stopflag でもよいが、次の候補は読み込まれていない。つまり a1=""  であることがわかる。

③ a0 の仮定ではまだ、決着がつかない場合。もう一度の break though をはかる。 klevel=2  にして、次の候補、 a1, b1 を Sheet 9 に書き込む。(この段階で、まだ b0 の試行を行っていないことに注目。)