2020-03-13 02:46:56 +01:00
2020-02-25 19:33:44 +01:00
2020-03-13 14:25:28 +01:00
2020-03-13 14:25:28 +01:00
2020-02-28 04:48:26 +01:00
2020-03-13 14:25:28 +01:00

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

Description
No description provided
Readme 148 KiB
Languages
C 100%