Number Place(数独)とSwift 3 (5)

backtrack3

もし、あなたが幸運であれば、あなたはバックトラック無しで、解答へ到達することができるかもしれません。これは、あなたが可能な動きが1つしかない空白の場所を多く見つけることができる場合に、特に真実です。

以下のリストでは、左側のテーブルは、現在の数字の配置を示しており、ドットが埋めるべき場所です。そして、右側のテーブルは、可能な動きの数を示しています。もし、あなたがeval=1である場所を見つければ、あなたはまずそのような場所を埋めるべきです。

nplaces = 52 

index=0, Position(row: 1, col: 7), eval=1
-----------------   -----------------
7 . 3 . . . . . .   . 4 . 4 4 5 3 3 4 
. 5 1 3 7 . 4 . .   3 . . . . 4 . 1 3 
6 . . . 1 . . 2 .   . 3 2 4 . 3 3 . 5 
. . 4 6 . . . . .   4 6 . . 2 3 4 4 4 
. . . . . 7 . 8 .   3 5 3 3 2 . 4 . 5 
5 . . 2 3 1 9 . .   . 3 2 . . . . 2 3 
3 . . . 2 4 . 9 1   . 2 3 3 . . 3 . . 
. . . . . . 8 4 .   3 4 4 3 2 3 . . 4 
. . 7 . 9 . 2 . .   3 4 . 3 . 4 . 3 3 
-----------------   -----------------
index=1, Position(row: 5, col: 7), eval=1
-----------------   -----------------
7 . 3 . . . . . .   . 4 . 4 4 5 2 2 3 
. 5 1 3 7 . 4 6 .   3 . . . . 3 . . 2 
6 . . . 1 . . 2 .   . 3 2 4 . 3 3 . 5 
. . 4 6 . . . . .   4 6 . . 2 3 4 4 4 
. . . . . 7 . 8 .   3 5 3 3 2 . 4 . 5 
5 . . 2 3 1 9 . .   . 3 2 . . . . 1 3 
3 . . . 2 4 . 9 1   . 2 3 3 . . 3 . . 
. . . . . . 8 4 .   3 4 4 3 2 3 . . 4 
. . 7 . 9 . 2 . .   3 4 . 3 . 4 . 2 3 
-----------------   -----------------
index=2, Position(row: 0, col: 6), eval=2
-----------------   -----------------
7 . 3 . . . . . .   . 4 . 4 4 5 2 2 3 
. 5 1 3 7 . 4 6 .   3 . . . . 3 . . 2 
6 . . . 1 . . 2 .   . 3 2 4 . 3 3 . 5 
. . 4 6 . . . . .   4 6 . . 2 3 3 3 3 
. . . . . 7 . 8 .   3 5 3 3 2 . 4 . 5 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 3 . . 3 . . 
. . . . . . 8 4 .   3 4 4 3 2 3 . . 4 
. . 7 . 9 . 2 . .   3 4 . 3 . 4 . 2 3 
-----------------   -----------------
index=3, Position(row: 0, col: 7), eval=1
-----------------   -----------------
7 . 3 . . . 1 . .   . 4 . 4 4 5 . 1 3 
. 5 1 3 7 . 4 6 .   3 . . . . 3 . . 2 
6 . . . 1 . . 2 .   . 3 2 4 . 3 3 . 5 
. . 4 6 . . . . .   4 6 . . 2 3 2 3 3 
. . . . . 7 . 8 .   3 5 3 3 2 . 3 . 5 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 3 . . 3 . . 
. . . . . . 8 4 .   3 4 4 3 2 3 . . 4 
. . 7 . 9 . 2 . .   3 4 . 3 . 4 . 2 3 
-----------------   -----------------
index=4, Position(row: 8, col: 7), eval=1
-----------------   -----------------
7 . 3 . . . 1 5 .   . 4 . 3 3 4 . . 2 
. 5 1 3 7 . 4 6 .   3 . . . . 3 . . 2 
6 . . . 1 . . 2 .   . 3 2 4 . 3 2 . 4 
. . 4 6 . . . . .   4 6 . . 2 3 2 2 3 
. . . . . 7 . 8 .   3 5 3 3 2 . 3 . 5 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 3 . . 3 . . 
. . . . . . 8 4 .   3 4 4 3 2 3 . . 4 
. . 7 . 9 . 2 . .   3 4 . 3 . 4 . 1 3 
-----------------   -----------------
index=5, Position(row: 3, col: 7), eval=1
-----------------   -----------------
7 . 3 . . . 1 5 .   . 4 . 3 3 4 . . 2 
. 5 1 3 7 . 4 6 .   3 . . . . 3 . . 2 
6 . . . 1 . . 2 .   . 3 2 4 . 3 2 . 4 
. . 4 6 . . . . .   4 6 . . 2 3 2 1 3 
. . . . . 7 . 8 .   3 5 3 3 2 . 3 . 5 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 3 . . 3 . . 
. . . . . . 8 4 .   3 4 4 3 2 3 . . 3 
. . 7 . 9 . 2 3 .   3 4 . 3 . 3 . . 2 
-----------------   -----------------
index=6, Position(row: 0, col: 8), eval=2
-----------------   -----------------
7 . 3 . . . 1 5 .   . 4 . 3 3 4 . . 2 
. 5 1 3 7 . 4 6 .   3 . . . . 3 . . 2 
6 . . . 1 . . 2 .   . 3 2 4 . 3 2 . 4 
. . 4 6 . . . 1 .   3 5 . . 2 3 2 . 3 
. . . . . 7 . 8 .   3 5 3 3 2 . 3 . 5 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 3 . . 3 . . 
. . . . . . 8 4 .   3 4 4 3 2 3 . . 3 
. . 7 . 9 . 2 3 .   3 4 . 3 . 3 . . 2 
-----------------   -----------------
index=7, Position(row: 1, col: 8), eval=1
-----------------   -----------------
7 . 3 . . . 1 5 8   . 3 . 2 2 3 . . . 
. 5 1 3 7 . 4 6 .   3 . . . . 3 . . 1 
6 . . . 1 . . 2 .   . 3 2 4 . 3 2 . 3 
. . 4 6 . . . 1 .   3 5 . . 2 3 2 . 3 
. . . . . 7 . 8 .   3 5 3 3 2 . 3 . 5 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 3 . . 3 . . 
. . . . . . 8 4 .   3 4 4 3 2 3 . . 3 
. . 7 . 9 . 2 3 .   3 4 . 3 . 3 . . 2 
-----------------   -----------------
index=8, Position(row: 0, col: 3), eval=2
-----------------   -----------------
7 . 3 . . . 1 5 8   . 3 . 2 2 3 . . . 
. 5 1 3 7 . 4 6 9   2 . . . . 2 . . . 
6 . . . 1 . . 2 .   . 3 2 4 . 3 2 . 2 
. . 4 6 . . . 1 .   3 5 . . 2 3 2 . 3 
. . . . . 7 . 8 .   3 5 3 3 2 . 3 . 5 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 3 . . 3 . . 
. . . . . . 8 4 .   3 4 4 3 2 3 . . 3 
. . 7 . 9 . 2 3 .   3 4 . 3 . 3 . . 2 
-----------------   -----------------
index=9, Position(row: 0, col: 4), eval=1
-----------------   -----------------
7 . 3 4 . . 1 5 8   . 2 . . 1 3 . . . 
. 5 1 3 7 . 4 6 9   2 . . . . 2 . . . 
6 . . . 1 . . 2 .   . 3 2 3 . 3 2 . 2 
. . 4 6 . . . 1 .   3 5 . . 2 3 2 . 3 
. . . . . 7 . 8 .   3 5 3 2 2 . 3 . 5 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 3 . . 3 . . 
. . . . . . 8 4 .   3 4 4 3 2 3 . . 3 
. . 7 . 9 . 2 3 .   3 4 . 3 . 3 . . 2 
-----------------   -----------------
index=10, Position(row: 7, col: 4), eval=1
-----------------   -----------------
7 . 3 4 6 . 1 5 8   . 2 . . . 2 . . . 
. 5 1 3 7 . 4 6 9   2 . . . . 2 . . . 
6 . . . 1 . . 2 .   . 3 2 3 . 3 2 . 2 
. . 4 6 . . . 1 .   3 5 . . 2 3 2 . 3 
. . . . . 7 . 8 .   3 5 3 2 2 . 3 . 5 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 3 . . 3 . . 
. . . . . . 8 4 .   3 4 4 3 1 3 . . 3 
. . 7 . 9 . 2 3 .   3 4 . 3 . 3 . . 2 
-----------------   -----------------
index=11, Position(row: 3, col: 4), eval=1
-----------------   -----------------
7 . 3 4 6 . 1 5 8   . 2 . . . 2 . . . 
. 5 1 3 7 . 4 6 9   2 . . . . 2 . . . 
6 . . . 1 . . 2 .   . 3 2 3 . 3 2 . 2 
. . 4 6 . . . 1 .   3 5 . . 1 3 2 . 3 
. . . . . 7 . 8 .   3 5 3 2 1 . 3 . 5 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 2 . . 3 . . 
. . . . 5 . 8 4 .   3 4 3 2 . 2 . . 2 
. . 7 . 9 . 2 3 .   3 4 . 2 . 2 . . 2 
-----------------   -----------------
index=12, Position(row: 4, col: 4), eval=1
-----------------   -----------------
7 . 3 4 6 . 1 5 8   . 2 . . . 2 . . . 
. 5 1 3 7 . 4 6 9   2 . . . . 2 . . . 
6 . . . 1 . . 2 .   . 3 2 3 . 3 2 . 2 
. . 4 6 8 . . 1 .   2 4 . . . 2 2 . 3 
. . . . . 7 . 8 .   3 5 3 2 1 . 3 . 5 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 2 . . 3 . . 
. . . . 5 . 8 4 .   3 4 3 2 . 2 . . 2 
. . 7 . 9 . 2 3 .   3 4 . 2 . 2 . . 2 
-----------------   -----------------
index=13, Position(row: 0, col: 1), eval=2
-----------------   -----------------
7 . 3 4 6 . 1 5 8   . 2 . . . 2 . . . 
. 5 1 3 7 . 4 6 9   2 . . . . 2 . . . 
6 . . . 1 . . 2 .   . 3 2 3 . 3 2 . 2 
. . 4 6 8 . . 1 .   2 4 . . . 2 2 . 3 
. . . . 4 7 . 8 .   3 5 3 2 . . 3 . 4 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 2 . . 3 . . 
. . . . 5 . 8 4 .   3 4 3 2 . 2 . . 2 
. . 7 . 9 . 2 3 .   3 4 . 2 . 2 . . 2 
-----------------   -----------------
index=14, Position(row: 0, col: 5), eval=1
-----------------   -----------------
7 2 3 4 6 . 1 5 8   . . . . . 1 . . . 
. 5 1 3 7 . 4 6 9   1 . . . . 2 . . . 
6 . . . 1 . . 2 .   . 3 2 3 . 3 2 . 2 
. . 4 6 8 . . 1 .   2 3 . . . 2 2 . 3 
. . . . 4 7 . 8 .   3 4 3 2 . . 3 . 4 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 2 . . 3 . . 
. . . . 5 . 8 4 .   3 3 3 2 . 2 . . 2 
. . 7 . 9 . 2 3 .   3 4 . 2 . 2 . . 2 
-----------------   -----------------
index=15, Position(row: 1, col: 0), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
. 5 1 3 7 . 4 6 9   1 . . . . 2 . . . 
6 . . . 1 . . 2 .   . 3 2 2 . 2 2 . 2 
. . 4 6 8 . . 1 .   2 3 . . . 1 2 . 3 
. . . . 4 7 . 8 .   3 4 3 2 . . 3 . 4 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 2 . . 3 . . 
. . . . 5 . 8 4 .   3 3 3 2 . 2 . . 2 
. . 7 . 9 . 2 3 .   3 4 . 2 . 2 . . 2 
-----------------   -----------------
index=16, Position(row: 1, col: 5), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 . 4 6 9   . . . . . 1 . . . 
6 . . . 1 . . 2 .   . 2 1 2 . 2 2 . 2 
. . 4 6 8 . . 1 .   2 3 . . . 1 2 . 3 
. . . . 4 7 . 8 .   3 4 3 2 . . 3 . 4 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 2 . . 3 . . 
. . . . 5 . 8 4 .   3 3 3 2 . 2 . . 2 
. . 7 . 9 . 2 3 .   2 4 . 2 . 2 . . 2 
-----------------   -----------------
index=17, Position(row: 2, col: 2), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 . . . 1 . . 2 .   . 2 1 2 . 2 2 . 2 
. . 4 6 8 . . 1 .   2 3 . . . 1 2 . 3 
. . . . 4 7 . 8 .   3 4 3 2 . . 3 . 4 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 2 . . 3 . . 
. . . . 5 . 8 4 .   3 3 3 2 . 2 . . 2 
. . 7 . 9 . 2 3 .   2 4 . 2 . 2 . . 2 
-----------------   -----------------
index=18, Position(row: 2, col: 1), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 . 9 . 1 . . 2 .   . 1 . 2 . 2 2 . 2 
. . 4 6 8 . . 1 .   2 3 . . . 1 2 . 3 
. . . . 4 7 . 8 .   3 4 2 2 . . 3 . 4 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 2 . . 3 . . 
. . . . 5 . 8 4 .   3 3 2 2 . 2 . . 2 
. . 7 . 9 . 2 3 .   2 4 . 2 . 2 . . 2 
-----------------   -----------------
index=19, Position(row: 3, col: 5), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 . 1 . . 2 .   . . . 2 . 2 2 . 2 
. . 4 6 8 . . 1 .   2 3 . . . 1 2 . 3 
. . . . 4 7 . 8 .   3 4 2 2 . . 3 . 4 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 2 . . 3 . . 
. . . . 5 . 8 4 .   3 3 2 2 . 2 . . 2 
. . 7 . 9 . 2 3 .   2 3 . 2 . 2 . . 2 
-----------------   -----------------
index=20, Position(row: 2, col: 5), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 . 1 . . 2 .   . . . 2 . 1 2 . 2 
. . 4 6 8 5 . 1 .   2 3 . . . . 1 . 2 
. . . . 4 7 . 8 .   3 4 2 1 . . 3 . 4 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 2 . . 3 . . 
. . . . 5 . 8 4 .   3 3 2 2 . 2 . . 2 
. . 7 . 9 . 2 3 .   2 3 . 2 . 2 . . 2 
-----------------   -----------------
index=21, Position(row: 2, col: 3), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 . 1 8 . 2 .   . . . 1 . . 2 . 2 
. . 4 6 8 5 . 1 .   2 3 . . . . 1 . 2 
. . . . 4 7 . 8 .   3 4 2 1 . . 3 . 4 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 2 . . 3 . . 
. . . . 5 . 8 4 .   3 3 2 2 . 2 . . 2 
. . 7 . 9 . 2 3 .   2 3 . 2 . 1 . . 2 
-----------------   -----------------
index=22, Position(row: 3, col: 6), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 . 2 .   . . . . . . 2 . 2 
. . 4 6 8 5 . 1 .   2 3 . . . . 1 . 2 
. . . . 4 7 . 8 .   3 4 2 1 . . 3 . 4 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 2 . . 3 . . 
. . . . 5 . 8 4 .   3 3 2 2 . 2 . . 2 
. . 7 . 9 . 2 3 .   2 3 . 2 . 1 . . 2 
-----------------   -----------------
index=23, Position(row: 2, col: 6), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 . 2 .   . . . . . . 1 . 2 
. . 4 6 8 5 3 1 .   2 2 . . . . . . 1 
. . . . 4 7 . 8 .   3 4 2 1 . . 2 . 3 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 2 . . 3 . . 
. . . . 5 . 8 4 .   3 3 2 2 . 2 . . 2 
. . 7 . 9 . 2 3 .   2 3 . 2 . 1 . . 2 
-----------------   -----------------
index=24, Position(row: 2, col: 8), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 .   . . . . . . . . 1 
. . 4 6 8 5 3 1 .   2 2 . . . . . . 1 
. . . . 4 7 . 8 .   3 4 2 1 . . 2 . 3 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 2 . . 2 . . 
. . . . 5 . 8 4 .   3 3 2 2 . 2 . . 2 
. . 7 . 9 . 2 3 .   2 3 . 2 . 1 . . 2 
-----------------   -----------------
index=25, Position(row: 3, col: 8), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
. . 4 6 8 5 3 1 .   2 2 . . . . . . 1 
. . . . 4 7 . 8 .   3 4 2 1 . . 2 . 3 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 2 . . 2 . . 
. . . . 5 . 8 4 .   3 3 2 2 . 2 . . 2 
. . 7 . 9 . 2 3 .   2 3 . 2 . 1 . . 2 
-----------------   -----------------
index=26, Position(row: 3, col: 0), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
. . 4 6 8 5 3 1 2   1 2 . . . . . . . 
. . . . 4 7 . 8 .   3 4 2 1 . . 2 . 2 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 2 . . 2 . . 
. . . . 5 . 8 4 .   3 3 2 2 . 2 . . 2 
. . 7 . 9 . 2 3 .   2 3 . 2 . 1 . . 2 
-----------------   -----------------
index=27, Position(row: 3, col: 1), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 . 4 6 8 5 3 1 2   . 1 . . . . . . . 
. . . . 4 7 . 8 .   2 3 2 1 . . 2 . 2 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 2 . . 2 . . 
. . . . 5 . 8 4 .   2 3 2 2 . 2 . . 2 
. . 7 . 9 . 2 3 .   2 3 . 2 . 1 . . 2 
-----------------   -----------------
index=28, Position(row: 4, col: 3), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
. . . . 4 7 . 8 .   2 3 2 1 . . 2 . 2 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 2 . . 2 . . 
. . . . 5 . 8 4 .   2 3 2 2 . 2 . . 2 
. . 7 . 9 . 2 3 .   2 3 . 2 . 1 . . 2 
-----------------   -----------------
index=29, Position(row: 8, col: 5), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
. . . 9 4 7 . 8 .   2 3 2 . . . 2 . 2 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 2 . . 2 . . 
. . . . 5 . 8 4 .   2 3 2 2 . 2 . . 2 
. . 7 . 9 . 2 3 .   2 3 . 2 . 1 . . 2 
-----------------   -----------------
index=30, Position(row: 7, col: 5), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
. . . 9 4 7 . 8 .   2 3 2 . . . 2 . 2 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 2 . . 2 . . 
. . . . 5 . 8 4 .   2 3 2 2 . 1 . . 2 
. . 7 . 9 6 2 3 .   2 2 . 2 . . . . 1 
-----------------   -----------------
index=31, Position(row: 8, col: 8), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
. . . 9 4 7 . 8 .   2 3 2 . . . 2 . 2 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 2 . . 2 . . 
. . . . 5 3 8 4 .   2 3 2 2 . . . . 2 
. . 7 . 9 6 2 3 .   2 2 . 2 . . . . 1 
-----------------   -----------------
index=32, Position(row: 4, col: 8), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
. . . 9 4 7 . 8 .   2 3 2 . . . 2 . 1 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 2 
3 . . . 2 4 . 9 1   . 2 3 2 . . 1 . . 
. . . . 5 3 8 4 .   2 3 2 2 . . . . 2 
. . 7 . 9 6 2 3 5   2 2 . 2 . . . . . 
-----------------   -----------------
index=33, Position(row: 4, col: 2), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
. . . 9 4 7 . 8 6   2 2 1 . . . 1 . . 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 1 
3 . . . 2 4 . 9 1   . 2 3 2 . . 1 . . 
. . . . 5 3 8 4 .   2 3 2 2 . . . . 1 
. . 7 . 9 6 2 3 5   2 2 . 2 . . . . . 
-----------------   -----------------
index=34, Position(row: 4, col: 0), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
. . 2 9 4 7 . 8 6   1 2 . . . . 1 . . 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 1 
3 . . . 2 4 . 9 1   . 2 3 2 . . 1 . . 
. . . . 5 3 8 4 .   2 3 1 2 . . . . 1 
. . 7 . 9 6 2 3 5   2 2 . 2 . . . . . 
-----------------   -----------------
index=35, Position(row: 4, col: 1), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
1 . 2 9 4 7 . 8 6   . 1 . . . . 1 . . 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 1 
3 . . . 2 4 . 9 1   . 2 3 2 . . 1 . . 
. . . . 5 3 8 4 .   1 3 1 2 . . . . 1 
. . 7 . 9 6 2 3 5   1 2 . 2 . . . . . 
-----------------   -----------------
index=36, Position(row: 4, col: 6), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
1 3 2 9 4 7 . 8 6   . . . . . . 1 . . 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 1 
3 . . . 2 4 . 9 1   . 2 3 2 . . 1 . . 
. . . . 5 3 8 4 .   1 3 1 2 . . . . 1 
. . 7 . 9 6 2 3 5   1 2 . 2 . . . . . 
-----------------   -----------------
index=37, Position(row: 5, col: 8), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
1 3 2 9 4 7 5 8 6   . . . . . . . . . 
5 . . 2 3 1 9 7 .   . 2 2 . . . . . 1 
3 . . . 2 4 . 9 1   . 2 3 2 . . 1 . . 
. . . . 5 3 8 4 .   1 3 1 2 . . . . 1 
. . 7 . 9 6 2 3 5   1 2 . 2 . . . . . 
-----------------   -----------------
index=38, Position(row: 6, col: 6), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
1 3 2 9 4 7 5 8 6   . . . . . . . . . 
5 . . 2 3 1 9 7 4   . 2 2 . . . . . . 
3 . . . 2 4 . 9 1   . 2 3 2 . . 1 . . 
. . . . 5 3 8 4 .   1 3 1 2 . . . . 1 
. . 7 . 9 6 2 3 5   1 2 . 2 . . . . . 
-----------------   -----------------
index=39, Position(row: 6, col: 1), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
1 3 2 9 4 7 5 8 6   . . . . . . . . . 
5 . . 2 3 1 9 7 4   . 2 2 . . . . . . 
3 . . . 2 4 6 9 1   . 1 2 2 . . . . . 
. . . . 5 3 8 4 .   1 3 1 2 . . . . 1 
. . 7 . 9 6 2 3 5   1 2 . 2 . . . . . 
-----------------   -----------------
index=40, Position(row: 5, col: 1), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
1 3 2 9 4 7 5 8 6   . . . . . . . . . 
5 . . 2 3 1 9 7 4   . 1 2 . . . . . . 
3 8 . . 2 4 6 9 1   . . 1 1 . . . . . 
. . . . 5 3 8 4 .   1 3 1 2 . . . . 1 
. . 7 . 9 6 2 3 5   1 1 . 2 . . . . . 
-----------------   -----------------
index=41, Position(row: 5, col: 2), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
1 3 2 9 4 7 5 8 6   . . . . . . . . . 
5 6 . 2 3 1 9 7 4   . . 1 . . . . . . 
3 8 . . 2 4 6 9 1   . . 1 1 . . . . . 
. . . . 5 3 8 4 .   1 2 1 2 . . . . 1 
. . 7 . 9 6 2 3 5   1 1 . 2 . . . . . 
-----------------   -----------------
index=42, Position(row: 6, col: 2), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
1 3 2 9 4 7 5 8 6   . . . . . . . . . 
5 6 8 2 3 1 9 7 4   . . . . . . . . . 
3 8 . . 2 4 6 9 1   . . 1 1 . . . . . 
. . . . 5 3 8 4 .   1 2 1 2 . . . . 1 
. . 7 . 9 6 2 3 5   1 1 . 2 . . . . . 
-----------------   -----------------
index=43, Position(row: 6, col: 3), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
1 3 2 9 4 7 5 8 6   . . . . . . . . . 
5 6 8 2 3 1 9 7 4   . . . . . . . . . 
3 8 5 . 2 4 6 9 1   . . . 1 . . . . . 
. . . . 5 3 8 4 .   1 2 1 2 . . . . 1 
. . 7 . 9 6 2 3 5   1 1 . 2 . . . . . 
-----------------   -----------------
index=44, Position(row: 7, col: 0), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
1 3 2 9 4 7 5 8 6   . . . . . . . . . 
5 6 8 2 3 1 9 7 4   . . . . . . . . . 
3 8 5 7 2 4 6 9 1   . . . . . . . . . 
. . . . 5 3 8 4 .   1 2 1 1 . . . . 1 
. . 7 . 9 6 2 3 5   1 1 . 2 . . . . . 
-----------------   -----------------
index=45, Position(row: 7, col: 2), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
1 3 2 9 4 7 5 8 6   . . . . . . . . . 
5 6 8 2 3 1 9 7 4   . . . . . . . . . 
3 8 5 7 2 4 6 9 1   . . . . . . . . . 
2 . . . 5 3 8 4 .   . 2 1 1 . . . . 1 
. . 7 . 9 6 2 3 5   1 1 . 2 . . . . . 
-----------------   -----------------
index=46, Position(row: 7, col: 3), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
1 3 2 9 4 7 5 8 6   . . . . . . . . . 
5 6 8 2 3 1 9 7 4   . . . . . . . . . 
3 8 5 7 2 4 6 9 1   . . . . . . . . . 
2 . 6 . 5 3 8 4 .   . 2 . 1 . . . . 1 
. . 7 . 9 6 2 3 5   1 1 . 2 . . . . . 
-----------------   -----------------
index=47, Position(row: 7, col: 1), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
1 3 2 9 4 7 5 8 6   . . . . . . . . . 
5 6 8 2 3 1 9 7 4   . . . . . . . . . 
3 8 5 7 2 4 6 9 1   . . . . . . . . . 
2 . 6 1 5 3 8 4 .   . 1 . . . . . . 1 
. . 7 . 9 6 2 3 5   1 1 . 1 . . . . . 
-----------------   -----------------
index=48, Position(row: 7, col: 8), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
1 3 2 9 4 7 5 8 6   . . . . . . . . . 
5 6 8 2 3 1 9 7 4   . . . . . . . . . 
3 8 5 7 2 4 6 9 1   . . . . . . . . . 
2 9 6 1 5 3 8 4 .   . . . . . . . . 1 
. . 7 . 9 6 2 3 5   1 1 . 1 . . . . . 
-----------------   -----------------
index=49, Position(row: 8, col: 0), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
1 3 2 9 4 7 5 8 6   . . . . . . . . . 
5 6 8 2 3 1 9 7 4   . . . . . . . . . 
3 8 5 7 2 4 6 9 1   . . . . . . . . . 
2 9 6 1 5 3 8 4 7   . . . . . . . . . 
. . 7 . 9 6 2 3 5   1 1 . 1 . . . . . 
-----------------   -----------------
index=50, Position(row: 8, col: 1), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
1 3 2 9 4 7 5 8 6   . . . . . . . . . 
5 6 8 2 3 1 9 7 4   . . . . . . . . . 
3 8 5 7 2 4 6 9 1   . . . . . . . . . 
2 9 6 1 5 3 8 4 7   . . . . . . . . . 
4 . 7 . 9 6 2 3 5   . 1 . 1 . . . . . 
-----------------   -----------------
index=51, Position(row: 8, col: 3), eval=1
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
1 3 2 9 4 7 5 8 6   . . . . . . . . . 
5 6 8 2 3 1 9 7 4   . . . . . . . . . 
3 8 5 7 2 4 6 9 1   . . . . . . . . . 
2 9 6 1 5 3 8 4 7   . . . . . . . . . 
4 1 7 . 9 6 2 3 5   . . . 1 . . . . . 
-----------------   -----------------
done
-----------------   -----------------
7 2 3 4 6 9 1 5 8   . . . . . . . . . 
8 5 1 3 7 2 4 6 9   . . . . . . . . . 
6 4 9 5 1 8 7 2 3   . . . . . . . . . 
9 7 4 6 8 5 3 1 2   . . . . . . . . . 
1 3 2 9 4 7 5 8 6   . . . . . . . . . 
5 6 8 2 3 1 9 7 4   . . . . . . . . . 
3 8 5 7 2 4 6 9 1   . . . . . . . . . 
2 9 6 1 5 3 8 4 7   . . . . . . . . . 
4 1 7 8 9 6 2 3 5   . . . . . . . . . 
-----------------   -----------------

あなたは、IBM Swift Sandboxで、プログラムを自分で試すことができます。

struct Position {
    var row: Int = -1
    var col: Int = -1
}
struct Place {
    var position = Position()
    var val: Int = 0
}

class NumBoard {
    var table         = [[Int]]()
    var tableEval     = [[Int]](repeating:[Int](repeating:99, count:9), count:9)
    var emptyPlaces   = [Place]()
    var sortedPlaces  = [Place]()
    var putPositions  = [Position]()
    var position      = Position()
    var place         = Place()
    var nplaces : Int = 0
    
    init() {
        table = [[7,0,3, 0,0,0, 0,0,0],
                 [0,5,1, 3,7,0, 4,0,0],
                 [6,0,0, 0,1,0, 0,2,0],
                 [0,0,4, 6,0,0, 0,0,0],
                 [0,0,0, 0,0,7, 0,8,0],
                 [5,0,0, 2,3,1, 9,0,0],
                 [3,0,0, 0,2,4, 0,9,1],
                 [0,0,0, 0,0,0, 8,4,0],
                 [0,0,7, 0,9,0, 2,0,0]]

        for rr in 0...8 {
            for cc in 0...8 {
                if table[rr][cc] == 0 {
                    nplaces += 1
                    position.row = rr
                    position.col = cc
                    tableEval[rr][cc] = eval(position: position)
                }
            }
        }
        print("nplaces = \(nplaces) \n")
    }

    func myprint2(table: [[Int]], table2: [[Int]]) {
        print("-----------------   -----------------")
        for rr in 0...8 {
            for cc in 0...8 {
                if table[rr][cc] >= 1 && table[rr][cc] <= 9 {
                    print(table[rr][cc], terminator: " ")
                } else {
                    print(".", terminator: " ")
                }
            }
            print("  ", terminator: "")
            for cc in 0...8 {
                if table2[rr][cc] >= 1 && table2[rr][cc] <= 9 {
                    print(table2[rr][cc], terminator: " ")
                } else {
                    print(".", terminator: " ")
                }
            }
            print("")
        }
        print("-----------------   -----------------")
    }

    func eval(position: Position) -> Int {
        var count = 0
        for num in 1...9 {
            if isSafeForNum(position: position, num: num) {
                count += 1
            }
        }
        return count
    }
    
    func isSafeForNum(position: Position, num: Int) -> Bool {
        for rr in 0...8 {
            if num == table[rr][position.col] { return false }
        }
        for cc in 0...8 {
            if num == table[position.row][cc] { return false }
        }
        let rowBase = (position.row / 3) * 3
        let colBase = (position.col / 3) * 3
        for rr in 0...2 {
            for cc in 0...2 {
                if num == table[rowBase+rr][colBase+cc] { return false }
            }
        }
        return true
    }

    func findPosition() -> Position {
        var minVal = 99
        var position = Position()
        for rr in 0...8 {
            for cc in 0...8 {
                if tableEval[rr][cc] < minVal {
                    minVal = tableEval[rr][cc]
                    position.row = rr
                    position.col = cc
                }
            }
        }
        return position
    }
    
    func update(position: Position) {
        let row = position.row
        let col = position.col
        var pos = Position()
        tableEval[row][col] = 99
        for rr in 0...8 {
            if rr != row && table[rr][col] == 0 {
                pos.row = rr
                pos.col = col
                tableEval[rr][col] = eval(position: pos)
            }
        }
        for cc in 0...8 {
            if cc != col && table[row][cc] == 0 {
                pos.row = row
                pos.col = cc
                tableEval[row][cc] = eval(position: pos)
            }
        }
        let rowBase = (row / 3) * 3
        let colBase = (col / 3) * 3
        let rowOffset = row - rowBase
        let colOffset = col - colBase
        for rr in 0...2 {
            for cc in 0...2 {
                if rr != rowOffset && cc != colOffset && table[rr+rowBase][cc+colBase] == 0 {
                    pos.row = rr + rowBase
                    pos.col = cc + colBase
                    tableEval[pos.row][pos.col] = eval (position: pos)
                }
            }
        }
    }

    func dropNum(index: Int) {
        position = findPosition()
        print("index=\(index), \(position), eval=\(tableEval[position.row][position.col])")
        myprint2(table: table, table2: tableEval)
        for num in 1...9 {
            if isSafeForNum(position: position, num: num) {
                table[position.row][position.col] = num
                putPositions.append(position)
                update(position: position)
                if putPositions.count == nplaces { return }
                dropNum(index: index+1)
                if putPositions.count != nplaces {
                    position = putPositions[putPositions.count - 1]
                    table[position.row][position.col] = 0
                    putPositions.removeLast()
                    update(position: position)
                }
            }
        }
    }
    
    func play() {
        dropNum(index: 0)
        print("done")
        myprint2(table: table, table2: tableEval)
    }
}

// main program
let myboard = NumBoard()
myboard.play()

プログラムは多少冗長ですが、その分読み易くなっているつもりです。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.