Jump to content

Sudoku: Difference between revisions

3,744 bytes added ,  14 years ago
Added PicoLisp
m (moved Sudoku Solver to Sudoku)
(Added PicoLisp)
Line 588:
in
{Inspect {Solve Puzzle1}.1}</lang>
 
=={{header|PicoLisp}}==
<lang PicoLisp>(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) ) )
 
(main
(quote
(5 3 0 0 7 0 0 0 0)
(6 0 0 1 9 5 0 0 0)
(0 9 8 0 0 0 0 6 0)
(8 0 0 0 6 0 0 0 3)
(4 0 0 8 0 3 0 0 1)
(7 0 0 0 2 0 0 0 6)
(0 6 0 0 0 0 2 8 0)
(0 0 0 4 1 9 0 0 5)
(0 0 0 0 8 0 0 7 9) ) )</lang>
Output:
<pre> +---+---+---+---+---+---+---+---+---+
9 | 5 3 | 7 | |
+ + + + + + + + + +
8 | 6 | 1 9 5 | |
+ + + + + + + + + +
7 | 9 8 | | 6 |
+---+---+---+---+---+---+---+---+---+
6 | 8 | 6 | 3 |
+ + + + + + + + + +
5 | 4 | 8 3 | 1 |
+ + + + + + + + + +
4 | 7 | 2 | 6 |
+---+---+---+---+---+---+---+---+---+
3 | 6 | | 2 8 |
+ + + + + + + + + +
2 | | 4 1 9 | 5 |
+ + + + + + + + + +
1 | | 8 | 7 9 |
+---+---+---+---+---+---+---+---+---+
a b c d e f g h i</pre>
<lang>(go)</lang>
Output:
<pre> +---+---+---+---+---+---+---+---+---+
9 | 5 3 4 | 6 7 8 | 9 1 2 |
+ + + + + + + + + +
8 | 6 7 2 | 1 9 5 | 3 4 8 |
+ + + + + + + + + +
7 | 1 9 8 | 3 4 2 | 5 6 7 |
+---+---+---+---+---+---+---+---+---+
6 | 8 5 9 | 7 6 1 | 4 2 3 |
+ + + + + + + + + +
5 | 4 2 6 | 8 5 3 | 7 9 1 |
+ + + + + + + + + +
4 | 7 1 3 | 9 2 4 | 8 5 6 |
+---+---+---+---+---+---+---+---+---+
3 | 9 6 1 | 5 3 7 | 2 8 4 |
+ + + + + + + + + +
2 | 2 8 7 | 4 1 9 | 6 3 5 |
+ + + + + + + + + +
1 | 3 4 5 | 2 8 6 | 1 7 9 |
+---+---+---+---+---+---+---+---+---+
a b c d e f g h i</pre>
 
=={{header|Python}}==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.