2013年6月17日月曜日

L search memorandam (2) Block select number


U search では、candy matrix ( Row vs Column ) から Swordfish に該当する 3 Pattern を見つけ出した。
L search や T search はこれに相当する matrix は、g_matrix になる。
 すなわち、 Lb search は gb_matrix (Block vs Number )
                       Lr search    は gl_matrix   ( Row vs Number )
                       Lc search   は gc_matrix    ( Column vs Number )
である。

L search の3種類の chainr matrix を作成する。

 Select Case kind1
 Case "B"
 two_hidden_number_in_block
 Case "R"
 two_hidden_number_in_row
 Case "C"
 two_hidden_number_in_column
 Case Else
  MsgBox ("No place in hidden digit!")
 End Select

各Block の候補の入っているセルの数を数えて chainc の右端 (z+1)列 に書き込む。
chainc は work area である。

   num = 0
 For kosu = 1 To z
  For i = 1 To z
 If chainr(i, z + 1) = kosu Then
   num = num + 1
   For j = 0 To z + 1
   chainc(num, j) = chainr(i, j)
   Next j
 End If
  Next i
 Next kosu

ひとまず、 chainr に移す。

 For i = 1 To z
  For j = 0 To z + 1
     chainr(i, j) = chainc(i, j)
  Next j
 Next i

同様のことを 列( Digit ) についても行う。

    num = 0
 For kosu = 1 To z
  For j = 1 To z
 If chainr(z + 1, j) = kosu Then
   num = num + 1
   For i = 0 To z + 1
      chainc(i, num) = chainr(i, j)
   Next i
 End If
  Next j
 Next kosu
 For i = 0 To z + 1
  For j = 1 To z
       chainr(i, j) = chainc(i, j)
  Next j
 Next i



Block 1(左上のブロック)の gb-matrix より chairr matrixを作る。


以上は L search ( Hidden ) の場合であるが、T search の場合には、その転置行列を作成してそれを使う。

つまり、Hidden の場合には、3つの部屋を占める3人を求めるのだが、Naked の場合には、3人が占める可能性がある3つの部屋を探すのである。

    Lsearch  Hidden  ( Block, Number )
    Tsearch  Naked  ( Number, Block )
   
 If kind = "naked" Then
 For i = 0 To z + 1
  For j = 0 To z + 1
       chainc(j, i) = chainr(i, j)
  Next j
 Next i
 For i = 0 To z + 1
  For j = 0 To z + 1
       chainr(i, j) = chainc(i, j)
  Next j
 Next i
 End If
 

0 件のコメント:

コメントを投稿