2012年8月18日土曜日

「次の一手」のアルゴリズム

龍涎ソフトの「次の一手」には、プレイ機能があります。画面の盤面に答えを直接入力できます。「確認」ボタンは、正解と照合して誤りがあれば指摘します。また「次の一手」ボタンでは、どうしてそうなるかを盤面で説明してくれます。これらの操作はすべて前回の「フォント制御」によって、首尾よくプログラムされます。

では、どうして「次の一手」が、個々人によって、どこから埋めて行くのかわからないのに、指定できるのでしょうか?

朝日新聞8月18日 Be on Saturday の数独問題を例に取り説明しましょう。この問題は、表出数24個、したがって空白セル数 57個なので、全57手でFinal Answerに到達します。


1   (1,2)= 1     B1   Block 1
2   (9,5)= 1     B1   Block 8
3   (3,5)= 3     B1   Block 2
4   (5,6)= 1     B2   Block 5
5   (8,6)= 3     B2   Block 8
6   (2,3)= 5     B2   Block 1
7   (7,5)= 6     B2   Block 8
8   (6,9)= 1     B3   Block 6
9   (1,5)= 5     B3   Block 2
10   (9,2)= 5     B3   Block 7
11   (8,5)= 8     B3   Block 8
12   (2,7)= 1     B4   Block 3
13   (1,6)= 4     B4   Block 2
14   (5,4)= 5     B4   Block 5
15   (8,7)= 5     B4   Block 9
16   (9,8)= 2     B5   Block 9
17   (3,8)= 4     B5   Block 3
18   (5,5)= 4     B5   Block 5
19   (4,8)= 5     B5   Block 6
20   (2,6)= 6     B5   Block 2
21   (1,7)= 2     B6   Block 3
22   (6,5)= 2     B6   Block 5
23   (9,9)= 6     B6   Block 9
24   (2,9)= 8     B6   Block 3
25   (2,1)= 2     B7   Block 1
26   (4,5)= 7     B7   Block 5
27   (5,8)= 8     B7   Block 6
28   (8,3)= 2     B8   Block 7
29   (5,7)= 6     B8   Block 6
30   (2,4)= 7     B8   Block 2
31   (5,2)= 2     B9   Block 4
32   (5,9)= 3     B9   Block 6
33   (1,8)= 6     B9   Block 3
34   (4,1)= 6     B9   Block 4
35   (2,5)= 9     B9   Block 2   二重枠の解
36   (6,2)= 3     B10   Block 4
37   (7,7)= 3     B10   Block 9
38   (3,3)= 6     B10   Block 1
39   (6,8)= 7     B10   Block 6
40   (4,2)= 8     B10   Block 4
41   (1,9)= 9     B10   Block 3
42   (9,1)= 3     B11   Block 7
43   (3,7)= 7     B11   Block 3
44   (3,1)= 8     B11   Block 1
45   (7,3)= 8     B11   Block 7
46   (7,8)= 9     B11   Block 9
47   (8,1)= 4     B12   Block 7
48   (1,1)= 7     B12   Block 1
49   (3,2)= 9     B12   Block 1
50   (9,4)= 4     B13   Block 8
51   (7,9)= 4     B13   Block 9
52   (5,3)= 7     B13   Block 4
53   (7,2)= 7     B13   Block 7   二重枠の解
54   (9,3)= 9     B13   Block 7
55   (8,9)= 7     B14   Block 9
56   (5,1)= 9     B14   Block 4
57   (8,4)= 9     B14   Block 8

まず、最初の3手目までは、4列目が B1 と表記されています。これは、基本技 B 「ブロッケン」で最初から埋めることができる場所の数(No of Entrance B)が3か所あることを示しています。つまりこの3手はどれが第一手になってもよいわけで、三手目までは、3!=6 通りの取り方があります。  
 
 次に B2 は7手目まで4か所あります。これは、三手目までの結果を「反映」させると新たに、4か所取れるところができたということです。

 人間が鉛筆で書き入れて解く場合には、その都度結果を「反映」させます。また、1から順番に埋めていく人や表出数の多い順に埋める人もいます。つまり、手順の数は、
  3×4×4×4×5・・・・・・5×3=  3888万通りもあります。
どの道を選ぶかは、解き手の癖によって違います。

次の一手のアルゴリズムは、その一つの手順にそって正解がすでに盤面にあるかどうかを調べていきます。そして最初に出会った空白セルが次の一手です。もし、それが、次の一手のヒントで値を知りたいセルでなければ、そのセルより前に確定しなければならないセルが残されているということです。たとえそのセルの正しい答えを入れてやっても、必ずその空白セルに到達する筈です。これは、ある数字だけを追っかけるようなときしばしばおこります。

また、知らず知らずのうちに上位の技(V:いづれにしても理論など)を使った場合も同じです。もっと簡単に取れるのに見落としてしまったような場合です。その結果、うまくいけば、後はすいすいと決まるということもあります。

0 件のコメント:

コメントを投稿