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 件のコメント:
コメントを投稿