/hsudoku

A sudoku solver, written in Haskell. Trying to imitate a human solver.

Primary LanguageHaskellGNU General Public License v3.0GPL-3.0

hsudoku is a sudoku solver written in Haskell.

When I studied functional programming at the university we got to write a sudoku solver in Haskell by using backtracking. Now that is not especially efficient, and it does not represent how humans think about sudokus.

Nowadays, I don't get to do any Haskell at work, so this is mostly just to make sure I won't forget anything, and a neat way to solve sudokus by using the same techniques humans do.

How to run

You'll need a Haskell compiler and/or interpreter.

To run compiled:

$ make
$ ./hsudoku -f "test.sud"

To run interpreted:

$ ghci Main.hs
*Solve> sud <- readSudoku "test.sud"
*Solve> putStrLn $ printBoard $ solve sud

Example input
-------------
When using the -s parameter for inputing sudoku strings from command line, the
board should be formatted as 9 groups of 9 characters, corresponding to the
rows of the sudoku. A character can be either a number of 1-9, or a . to
indicate a "hole". Here is an example:

.7...6... 9......41 ..8..9.5. .9...7..2 ..3...8.. 4..8...1. .8.3..9.. 16......7...5...8.


Corresponds to:

.7...6... 9......41 ..8..9.5. .9...7..2 ..3...8.. 4..8...1. .8.3..9.. 16......7 ...5...8.


Related projects
----------------
Check out [sudoku_ocr](https://github.com/jonte/sudoku_ocr), which can do OCR
of sudoku images and output to a format readable by this solver.