Most ingenious puzzle solution

もっとも巧妙なパズルの解

受賞者:Aidan Thornton

引用元:https://www.ioccc.org/2005/aidan/aidan.c

審査員・作者による説明:https://www.ioccc.org/2005/aidan/hint.text

動作

数独のソルバおよび問題作成器。

無引数で呼び出して問題を標準入力に与えるとソルバになる。

$ gcc -o aidan aidan.c

$ ./aidan < insane1.sudoku
. . 4 | . . . | . 5 6
5 . . | . 7 2 | . . .
. . 1 | . . . | 8 . .
------+-------+------
. . . | . . . | . . .
. . . | 6 9 3 | . . 5
. . . | . . . | 7 3 4
------+-------+------
. 5 . | 2 . 1 | 4 . 8
3 . . | . . . | . . .
. . . | . . . | . 6 1


7 3 4 | 8 1 9 | 2 5 6
5 8 6 | 4 7 2 | 9 1 3
2 9 1 | 3 5 6 | 8 4 7
------+-------+------
1 2 3 | 5 4 7 | 6 8 9
8 4 7 | 6 9 3 | 1 2 5
9 6 5 | 1 2 8 | 7 3 4
------+-------+------
6 5 9 | 2 3 1 | 4 7 8
3 1 8 | 7 6 4 | 5 9 2
4 7 2 | 9 8 5 | 3 6 1

Done (stk 0 3)

シード付きで起動すると問題を作成する。

$ ./aidan 1
. . . | . . . | . . .
. . . | . . . | . . .
. . . | . . . | . . .
------+-------+------
. . . | . . . | . . .
. . . | . . . | . . .
. . . | . . . | . . .
------+-------+------
. . . | . . . | . . .
. . . | . . . | . . .
. . . | . . . | . . .


2 1 3 | 7 8 9 | 4 5 6
6 4 7 | 5 1 2 | 8 3 9
8 5 9 | 3 4 6 | 7 2 1
------+-------+------
7 8 1 | 4 6 3 | 2 9 5
3 6 2 | 9 5 8 | 1 4 7
4 9 5 | 1 2 7 | 3 6 8
------+-------+------
9 2 4 | 6 7 1 | 5 8 3
5 7 6 | 8 3 4 | 9 1 2
1 3 8 | 2 9 5 | 6 7 4

Done (stk 44 44)


2 . . | 7 8 . | . . .
6 . . | . . 2 | . 3 9
8 . . | . . . | . . 1
------+-------+------
7 . 1 | . . 3 | . 9 5
. . . | . . . | . 4 .
. . 5 | . . . | . . 8
------+-------+------
. . 4 | . . . | . . .
. . . | . . 4 | 9 . 2
1 . . | 2 . . | 6 . .

Done (stk 82 6)

解説

変な変数名や、gotoによるわかりにくいフローなど。 アルゴリズムはブルートフォースではないらしい。詳細未解析。