man sudoku
NAME
sudoku - sudoku solver
SYNOPSIS
sudoku -options
DESCRIPTION
Solve 9x9 sudoku puzzles via logic (vs. "brute force"). The puzzle is read from
stdin. A total of 81 values must be read, expectation is reading 9 rows of 9 val-
ues but any number may be entered per line. Use zero (0) for an unknown value.
Characters ".*x" will be interpreted as a zero. Spaces or any punctuation are con-
sidered delimeters and are ignored. A puzzle can also be read as 81 consecutive
digits [0-9].
In the case of non-unique puzzles, two solutions will be displayed (there may be
more). In the case of impossible puzzles, solver will stop indicating where it
detected the problem. Options allow display of solution progress.
OPTIONS
-help Display terse usage information.
-example N
Use a pre-coded example, where N is one of 17 (or more) internal examples.
Example 8 is non-unique and example 9 is invalid. Example 12 is a case
where "logic" fails but there is only one unique "brute" solution.
-f Option to display all pre-coded examples.
-level L
Initial level to start solving. Solution is done in levels masking to
determine possible values for a row, column, or box. Typically solver
starts from level-1 and works up to 6 if necessary. Most puzzles are solved
by level-2. This option is primarily for geek-ish interests.
-brute B
Number of unique solutions to display when resorting to brute (trial and
error), defaults to 2. Specificy 0 for all possible solutions. Note, exam-
ples 12 and 17 both require brute algorithm but have only have one solution
(or my logic is flawed).
-maximum M
Maximum level to attempt solution. This option is useful for trying to
learn how to solve sudoku puzzles with your noggin.
-show S
Specify "show level" for solution progress. The "S" defaults as 0 and is a
bit mask where:
0 initial/results only
1 possible values
2 eliminated values
4 octal mask of possible values
The mask is powers of two for numeric values. For example, if an entry can
be only 1 or 4, the mask is:
2**(1-1) | 2**(4-1) : 1 | 8 : 9 : 0o0101
For more information on how the solver works, read the comments at start of
solver.c source code.
-initial
Show initial values only. This is useful for validating that puzzle has no
duplicate entries.
-progress
Show progress to solution.
-quiet Turns off prompt for interactive puzzles and does not display initial val-
ues.
-verbose
Display at various partial solution points.
-z Option to display in von der Burg format (81 digits).
EXAMPLES
iceberg2: sudoku -example 3
_Pocket Sudoku_ Volume 3, #145
"Beware! Very Challenging!" (Will Shortz)
Level -1 Known 22, Unknown 59, Solved 0, Errors 0
+---------------+---------------+---------------+
| (2) (1) . | . . . | . . . |
| . . . | . . (3) | (1) . . |
| . . (9) | (4) . . | . . (7) |
+---------------+---------------+---------------+
| (8) (2) (5) | . . (4) | . . . |
| . . . | (6) . . | . . . |
| (1) . . | . . (8) | (2) . . |
+---------------+---------------+---------------+
| . (7) . | . (9) . | . . . |
| . . . | . (3) (1) | . (4) . |
| . . . | . . . | (3) (8) . |
+---------------+---------------+---------------+
_Pocket Sudoku_ Volume 3, #145
"Beware! Very Challenging!" (Will Shortz)
Level 3 Known 22, Unknown 0, Solved 59, Errors 0
+---------------+---------------+---------------+
| (2) (1) 8 | 9 6 7 | 4 3 5 |
| 5 4 7 | 2 8 (3) | (1) 9 6 |
| 3 6 (9) | (4) 1 5 | 8 2 (7) |
+---------------+---------------+---------------+
| (8) (2) (5) | 1 7 (4) | 9 6 3 |
| 7 3 4 | (6) 2 9 | 5 1 8 |
| (1) 9 6 | 3 5 (8) | (2) 7 4 |
+---------------+---------------+---------------+
| 4 (7) 3 | 8 (9) 2 | 6 5 1 |
| 6 8 2 | 5 (3) (1) | 7 (4) 9 |
| 9 5 1 | 7 4 6 | (3) (8) 2 |
+---------------+---------------+---------------+
iceberg2: ./sudoku
Row 1: 0,0,0,8,0,0,5,0,0
Row 2: 0,0,0,9,0,7,8,0,0
Row 3: 6,4,0,0,0,0,0,0,0
Row 4: 0,3,0,0,0,0,0,4,1
Row 5: 0,0,0,0,1,0,0,0,0
Row 6: 5,2,0,0,0,0,0,7,0
Row 7: 0,0,0,0,0,0,0,1,5
Row 8: 0,0,5,4,0,2,0,0,0
Row 9: 0,0,2,0,0,8,0,0,0
Level -1 Known 21, Unknown 60, Solved 0, Errors 0
+---------------+---------------+---------------+
| . . . | (8) . . | (5) . . |
| . . . | (9) . (7) | (8) . . |
| (6) (4) . | . . . | . . . |
+---------------+---------------+---------------+
| . (3) . | . . . | . (4) (1) |
| . . . | . (1) . | . . . |
| (5) (2) . | . . . | . (7) . |
+---------------+---------------+---------------+
| . . . | . . . | . (1) (5) |
| . . (5) | (4) . (2) | . . . |
| . . (2) | . . (8) | . . . |
+---------------+---------------+---------------+
Level 2 Known 21, Unknown 0, Solved 60, Errors 0
+---------------+---------------+---------------+
| 2 7 9 | (8) 4 1 | (5) 6 3 |
| 1 5 3 | (9) 6 (7) | (8) 2 4 |
| (6) (4) 8 | 5 2 3 | 1 9 7 |
+---------------+---------------+---------------+
| 9 (3) 7 | 2 8 5 | 6 (4) (1) |
| 4 8 6 | 7 (1) 9 | 3 5 2 |
| (5) (2) 1 | 6 3 4 | 9 (7) 8 |
+---------------+---------------+---------------+
| 8 9 4 | 3 7 6 | 2 (1) (5) |
| 3 1 (5) | (4) 9 (2) | 7 8 6 |
| 7 6 (2) | 1 5 (8) | 4 3 9 |
+---------------+---------------+---------------+
ACKNOWLEDGEMENTS
Written using University of Alaska, Arctic Region Supercomputing Center (ARSC)
resources just for fun. Ongoing maintenance via SourceForge by Denali Sun Consult-
ing.
Suggestions or bug reports can be directed to denalisun907@gmail.com.