2013年6月4日火曜日

U search memoramdum (6) column_fish_judge

 ある数字(nb)に注目し、各行、各列にある候補の数を拡大matrix chainb に作成し、work area の chainc を使って、候補の数が少ない順に、行・列を並び替えた chainr matrix を作成しました。

room=3 は、関係するセルの数です。それ以上のものは関係なく取り除きます。新しく関係するセルだけを含む matrix jun を作成します。
'
Sub column_fish_judge()
  Erase chainc
 ReDim chainc(z + 1, z + 1)

chainr の最下行にある候補の数を調べて、room より多いのは省きます。
work area の chainc に借り置きします。

roomより少ない列がnumある。


 num = 0
 For j = 1 To z
     aa = chainr(z + 1, j)
  If aa = "" Or aa = 1 Then GoTo contj
  If aa <= room Then
   num = num + 1
   For k = 0 To z + 1
   chainc(k, num) = chainr(k, num)
   Next k
  End If
contj:
 Next j

左端の列のタイトルを移す。

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

jun  jnn matrix 登場。
Erase jun, jnn
 ReDim jun(z + 1, z + 1), jnn(z + 1, z + 1)

先に作った絞り込み Matrix を jun に移す。

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

絞り込んだ列の数(roomより少ない関係する列)を 左下のセル(z+1,0)=num
に書き込む。

 num = 0
For j = 1 To z
If jun(z + 1, j) <> "" Then
 num = num + 1
End If
Next j
 chainc(z + 1, 0) = num
 jun(z + 1, 0) = num

room国同盟に足りない場合はおさらば。
三国同盟をするのに二国しか該当しない。

If jun(z + 1, 0) < room Then
Exit Sub
End If

同様の絞り込みを行に対しても行う。

For i = 1 To z
 inum = 0
 For j = 1 To z
 If jun(i, j) <> "" Then
   inum = inum + 1
 End If
 Next j
 jun(i, z + 1) = inum
 chainc(i, z + 1) = inum
Next i

room に応じて次のマクロに分かれる。

Select Case room
Case 2
 column_X_wing
Case 3
 column_swordfish
Case 4
 column_jellyfish
Case 5
 column_squirmbag
Case Else
 MsgBox ("This case available ! ")
End Select


0 件のコメント:

コメントを投稿