📄 sudoku.l
字号:
# 21jan07abu# (c) Software Lab. Alexander Burger(load "lib/simul.l")### Fields/Board #### val lst(setq *Board (grid 9 9) *Fields (apply append *Board) )# Init values to zero (empty)(for L *Board (for This L (=: val 0) ) )# Build lookup lists(for (X . L) *Board (for (Y . This) L (=: lst (make (let A (* 3 (/ (dec X) 3)) (do 3 (inc 'A) (let B (* 3 (/ (dec Y) 3)) (do 3 (inc 'B) (unless (and (= A X) (= B Y)) (link (prop (get *Board A B) 'val) ) ) ) ) ) ) (for Dir '(`west `east `south `north) (for (This (Dir This) This (Dir This)) (unless (memq (:: val) (made)) (link (:: val)) ) ) ) ) ) ) )# Cut connections (for display only)(for (X . L) *Board (for (Y . This) L (when (member X (3 6)) (con (car (val This))) ) (when (member Y (4 7)) (set (cdr (val This))) ) ) )# Display board(de display () (disp *Board 0 '((This) (if (=0 (: val)) " " (pack " " (: val) " ") ) ) ) )# Initialize board(de main (Lst) (for (Y . L) Lst (for (X . N) L (put *Board X (- 10 Y) 'val N) ) ) (display) )# Find solution(de go () (unless (recur (*Fields) (with (car *Fields) (if (=0 (: val)) (loop (NIL (or (assoc (inc (:: val)) (: lst)) (recurse (cdr *Fields)) ) ) (T (= 9 (: val)) (=: val 0)) ) (recurse (cdr *Fields)) ) ) ) (display) ) )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -