README
January 17, 2011 ยท View on GitHub
sudoku-mcclim
Overview:
This is a collection of sudoku generator & solver functions for Common Lisp:
- sudoku.lisp ............. core functions
- sudoku-control.lisp ..... functions for playing games
- sudoku-ui-mcclim.lisp ... GUI for McCLIM
The program can generate and solve any size of sudoku ((mn)^2), where m and n are the number of rows and columns of a block, respectively, and the number of total rows/columns is mn.
Usage:
Starting GUI
(asdf:oos 'asdf:load-op 'sudoku-mcclim)
(sudoku-mcclim:run)
If GUI is not needed, 'sudoku-control' package provides CUI for game playing. 'sudoku' package contains core functions.
examples:
(asdf:oos 'asdf:load-op 'sudoku)
;; This makes a valid sudoku table.
(car (sudoku:make-multiple-sudoku-table 1 '(3 3) :random t))
=> #S(SUDOKU:STBL
:TABLE #2A((2 9 6 5 4 7 3 8 1)
(5 3 4 8 6 1 7 9 2)
(7 8 1 2 9 3 4 5 6)
(4 6 8 3 7 9 2 1 5)
(1 5 7 6 8 2 9 4 3)
(9 2 3 1 5 4 8 6 7)
(3 4 2 9 1 6 5 7 8)
(6 7 5 4 2 8 1 3 9)
(8 1 9 7 3 5 6 2 4))
:NR 3
:NC 3
:DIMENSION 9)
;; This creates a sudoku problem, trying to mask 50 cells. It is
;; not guaranteed that the specified number of cells are actually
;; masked.
(sudoku:make-sudoku-mask
(car (sudoku:make-multiple-sudoku-table 1 '(3 3) :random t))
50)
=> #S(SUDOKU:STBL
:TABLE #2A((0 0 1 6 0 0 0 0 0)
(5 0 0 0 0 0 7 0 9)
(0 8 0 4 0 0 3 0 5)
(4 0 7 8 0 2 0 0 1)
(2 0 5 9 0 3 0 0 0)
(9 1 0 0 4 6 0 3 0)
(7 0 0 2 0 0 0 0 0)
(0 0 0 0 7 0 9 2 6)
(0 9 0 0 0 4 0 0 0))
:NR 3
:NC 3
:DIMENSION 9)
#S(SUDOKU:STBL
:TABLE #2A((3 7 1 6 9 5 2 8 4)
(5 2 4 1 3 8 7 6 9)
(6 8 9 4 2 7 3 1 5)
(4 3 7 8 5 2 6 9 1)
(2 6 5 9 1 3 4 7 8)
(9 1 8 7 4 6 5 3 2)
(7 5 6 2 8 9 1 4 3)
(8 4 3 5 7 1 9 2 6)
(1 9 2 3 6 4 8 5 7))
:NR 3
:NC 3
:DIMENSION 9)
#S(SUDOKU:STBL
:TABLE #2A((1 1 0 0 1 1 1 1 1)
(0 1 1 1 1 1 0 1 0)
(1 0 1 0 1 1 0 1 0)
(0 1 0 0 1 0 1 1 0)
(0 1 0 0 1 0 1 1 1)
(0 0 1 1 0 0 1 0 1)
(0 1 1 0 1 1 1 1 1)
(1 1 1 1 0 1 0 0 0)
(1 0 1 1 1 0 1 1 1))
:NR 3
:NC 3
:DIMENSION 9)
;; Solve a sudoku problem.
(sudoku::solve-sudoku
#S(SUDOKU:STBL
:TABLE #2A((0 0 1 6 0 0 0 0 0)
(5 0 0 0 0 0 7 0 9)
(0 8 0 4 0 0 3 0 5)
(4 0 7 8 0 2 0 0 1)
(2 0 5 9 0 3 0 0 0)
(9 1 0 0 4 6 0 3 0)
(7 0 0 2 0 0 0 0 0)
(0 0 0 0 7 0 9 2 6)
(0 9 0 0 0 4 0 0 0))
:NR 3
:NC 3
:DIMENSION 9))
=> #S(SUDOKU:STBL
:TABLE #2A((3 7 1 6 9 5 2 8 4)
(5 2 4 1 3 8 7 6 9)
(6 8 9 4 2 7 3 1 5)
(4 3 7 8 5 2 6 9 1)
(2 6 5 9 1 3 4 7 8)
(9 1 8 7 4 6 5 3 2)
(7 5 6 2 8 9 1 4 3)
(8 4 3 5 7 1 9 2 6)
(1 9 2 3 6 4 8 5 7))
:NR 3
:NC 3
:DIMENSION 9)
Notes:
-
This program uses images included in Gimp: Logos of "Basic I" & "Comic Book".
-
As you see, the images are very primitive, except that came from Gimp ("Number(Comic)" in Style and Check messages). You can add your images for cells.
-
Create a directory under images.
mkdir
-
Put 100-pixel x 100-pixel xpm images under the directory, at least 4 of them, whose names are "s4-
.xpm". $ cp
/s4-*.xpm / -
Run resize-sudoku-images.lisp. It creates images for sudoku with sizes of , and .
$ ./resize-sudoku-images.lisp
-
Add images to Style menu. For example, if you created s*-cat.xpm, s*-dog.xpm, s*-monkey.xpm and s*-bird.xpm under images/animals directory:
(sudoku-mcclim:add-image '("Image(animals)" "animals" ("cat" "dog" "monkey" "bird")))
then, "Image(animals)" will appear in Style menu.
-