「 あらゆる数独パズルを解く」はPeter Norvigなのに、Pythonで書かれている。
じゃあというわけでelispで書いてみた。
(2) ある値に対し、ユニットの中で置ける場所が1つしかないなら、その値をそこに置く。
は、うまく動かなかったのでコメントアウトしているけど。
それでも「 あらゆる数独パズルを解く」のページの問題はいちおう解けたからだいじょうぶだと思うけど。
まぁ、よいか。
( defun test () ( progn (sudoku-init) (sudoku-set " . . 5 |3 . . |. . . 8 . . |. . . |. 2 . . 7 . |. 1 . |5 . . ------+------+------ 4 . . |. . 5 |3 . . . 1 . |. 7 . |. . 6 . . 3 |2 . . |. 8 . ------+------+------ . 6 . |5 . . |. . 9 . . 4 |. . . |. 3 . . . . |. . 9 |7 . . ") (sudoku-solve) (sudoku-print))) (benchmark 1 '(test)) | 1 4 5 | 3 2 7 | 6 9 8 | | 8 3 9 | 6 5 4 | 1 2 7 | | 6 7 2 | 9 1 8 | 5 4 3 | |-------+-------+-------| | 4 9 6 | 1 8 5 | 3 7 2 | | 2 1 8 | 4 7 3 | 9 5 6 | | 7 5 3 | 2 9 6 | 4 8 1 | |-------+-------+-------| | 3 6 7 | 5 4 2 | 8 1 9 | | 9 8 4 | 7 6 1 | 2 3 5 | | 5 2 1 | 8 3 9 | 7 6 4 | "Elapsed time: 0.179490s (0.093774s in 1 GCs)"
ベンチマークもそこそこ。