sudoku/README.md

69 lines
1.6 KiB
Markdown

# Sudoku solver
A simple sudoku problem solver because I got bored of solving them manually.
## File format
The sudoku solver accepts a file for the following format:
* Each row consists of 9 characters (+ newline)
* Each character on a row (aside from newline) must be '0'-'9' or ' ' (if value is unknown)
* There must be a total of 9 rows
For example, a file might look as follows:
```
23456789
2 4567891
34 678912
456 89123
5678 1234
67891 345
789123 56
8912345 7
91234567
```
or
```
123456789
2 456 891
3456789
456 89123
5678 12 4
6 91 345
789123456
8 12345 7
912345678
```
## Compiling and running
To test the functionality, simply run `gcc -o sudoku main.c board.c`, then
`./sudoku [-v[v]] {filename}`, where the given file is formatted according to
the aforementioned specifications.
## Optimization
An optimization directive has been included in `board.c` to allow for the near
complete removal of boundary checks and error conditions. To enable this
optimization, simply add `-DOPTIMIZE` to your compiler flags. For insane speeds,
don't forget the `-O3` gcc flag.
## Live status output
If you would like to get a live status output of speculative value placement,
include the `-v` for verbose-mode solving (or `-vv` for more verbosity) when
running the sudoku program. **Please note:** Most boards will be solved in a
matter of milliseconds (at most) on modern machines, so these verbosity options
are really only useful on much slower devices.
## TODO
* Cleaner code
* Move printing to separate file
* Move board solver algorithm to separate file
* Better error messages
* Makefile