二国同盟Part3 java支援プログラム

二国同盟が成立するパターンの探索にjavaプログラムを使います。

二国同盟には、縦列/横行/ブロックの3種類があります。ブロック以外の二国同盟については下のリスト。

二国同盟Part3の解き方

初期配置では、レーザー発射法も、Naked Single法も、Locked Candidates法も使えません。二国同盟法を1回使い、後はレーザー発射法だけです。

1と9の二国同盟が中段左(E3,F2)にあります。

二国同盟法

二国同盟を見つける為に、ナンプレ盤面上部の1~9のボタンを押していきます。ナンプレ盤面

1のボタン、9のボタンを押した時のナンプレ盤面のボタン、のボタンを押すと、上図のようになります。中段左のブロックには、1の空きマスも9の空きマスも、E3,F2だけです。

二国同盟の成立

二国同盟(19同盟)が成立した時のナンプレ盤面従って、この2つのマスE3,F2には、1と9以外の数字は入れません。二国同盟(19同盟)が見つかりました。右図。

2のボタンを押した時ここで、のボタンを押すと、2の入れるマスは、D3E3です。右図。

D3に2が確定

29に5が確定E3には、二国同盟で1か9が入るので、2は入れません。D3に2が確定します。E3のマスの候補から2が追い出されたのです。右図。E3に2を入力します。

二国同盟の見つけ方のプログラムのアルゴリズム

javaプログラムは、1、2、3の3つの多重ループになっています。それぞれのループで、1~9のボタンを押していきます(プログラムの中で)。

手作業でも、メモを取りながらボタンを押していくと、できます。しかし、多大な作業を要するので、ボタン一発で解答を得られる「ブロック二国同盟法Wの発動」というプログラムを作りました。このプログラムでも2、3秒かかります。左のボタンを押すとナンプレ盤面にjumpし、D3にグレーの2があり、埋まっているマスの数が24個から25個に増えているのが、判ります。

「二国同盟法の発動」のソースコード(100行)

  1. 空きマスが2個のブロックを探索

    第1のループ

    1のボタンを押したところ右の図は、のボタンを押したところです。

    のボタンを押すと、1つのブロック内での空きマスが2個あるのは、中段左(A)、下段中(B)の2箇所である事が分かります(右図)。まず、中段左のブロックのA(E3F2)から考えます。(サブ ループ)。失敗した時は、Bについて、同じ事をします。

  2. 空きマスが上記と同じ状態のブロックを探索

    第2のループ

    9のボタンを押したところ2、3、4、5、6、7、8、9とボタンを押して、中段左のブロックのAと空きマスの状態が同じもの(E3、F2が空きマス)を探します。

    右の図は、のボタンを押したところです。この場合は、幸いにも、のボタンを押した時のA(E3、F2が空きマス)が、当てはまりました。A(E3、F2)には、1、9の二国同盟以外は入れません。

  3. 空きマスが上記と1個違う状態のブロックを探索

    第3のループ

    2のボタンを押したところ 中段左のブロックのE3とF2のマス(A)に注目しながら、1から9のボタンを押していきます。中段左のブロックで空きマスが2つで、そのうちの1つがE3かF2のものを探します。
    のボタンを押したのが右の図で、それに該当します。中段左のブロックで、2が入れるのはD3E3ですが、E3には1と9の二国同盟が入るので、D3に2が確定します。E3のマスの候補から2が追い出されたのです。

    該当する数字がなかったら、第1のループに戻って、Bについて、同じことをします。それでもだめな場合は、第1のループで2、3、4…のボタンを押していきます。

二国同盟法の後はレーザー発射法

の後、以下の順番でボタンを押していけば、解けます。

3回、3回、1回、2回、2回、3回、1回、2回、1回、5回、4回、2回…。完了。

上記の作業が面倒な方は、下のボタンを押せば、レーザー発射法で、瞬時に解答図までいけます。

二国同盟Part3の解答解答は右図になります。

ナンプレ問題盤面

clickしたマスの候補だけ
座標のマスの唯一の候補はNaked Singleでだけ
clickしたマスにを連続入力:

ナンプレ盤面
A
B
C
D
E
F
G
H
I



←盤面変更禁止チェックを入れると、その時、埋められているマスは変更不可になり、外せば再度、変更可能です。2つのボタンは、チェックが入っているとdisabledです。(文字が薄い)

textarea(Text box)は、直接編集可。左クリック→右クリック→全て選択→コピペできます。

最後まで読んでいただいて、ありがとうございました。