summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sudoku.scm38
1 files changed, 38 insertions, 0 deletions
diff --git a/sudoku.scm b/sudoku.scm
index 7b1743c..965e8d2 100644
--- a/sudoku.scm
+++ b/sudoku.scm
@@ -16,6 +16,15 @@
(iota board-size))))
+(define (set-initial-value board col row val)
+ (add-clause
+ (list
+ (array-ref board
+ col
+ row
+ (1- val)))))
+
+
(let ((board (make-array #f
board-size
board-size
@@ -64,6 +73,35 @@
(array-ref board col row value))
(iota board-size)))))
+ ;; Initially specified values
+ (set-initial-value board 0 0 4)
+ (set-initial-value board 0 7 5)
+ (set-initial-value board 0 8 1)
+
+ (set-initial-value board 1 1 3)
+ (set-initial-value board 1 3 2)
+
+ (set-initial-value board 2 8 4)
+
+ (set-initial-value board 3 2 7)
+ (set-initial-value board 3 6 6)
+ (set-initial-value board 3 7 2)
+
+ (set-initial-value board 4 4 8)
+ (set-initial-value board 4 5 1)
+
+ (set-initial-value board 5 6 3)
+
+ (set-initial-value board 6 0 8)
+ (set-initial-value board 6 4 4)
+
+ (set-initial-value board 7 3 6)
+ (set-initial-value board 7 6 7)
+
+ (set-initial-value board 8 0 5)
+
+
+
(let ((vals (solve-sat)))
(do ((row 0 (1+ row))) ((= row board-size))
(do ((col 0 (1+ col))) ((= col board-size))