~sschwarzer/sudoku-solver

Sudoku solver in Racket
Fix CLI help formatting for Racket 8.2
Update Racket version to 8.2
Include version in artifacts

clone

read-only
https://git.sr.ht/~sschwarzer/sudoku-solver
read/write
git@git.sr.ht:~sschwarzer/sudoku-solver

You can also use your local clone with git send-email.

#Sudoku solver

This repository implements a simple Sudoku solver, written in Racket .

After installing the package sudoku-solver, you can run the solver on an input file with

$ sudoku-solver <input-path>

The expected input format looks like this:

53- -7- ---
6-- 195 ---
-98 --- -6-

8-- -6- --3
4-- 8-3 --1
7-- -2- --6

-6- --- 28-
--- 419 --5
--- -8- -79

Whitespace can be added for readability, but is ignored when parsing the input.

If a solution exists, the program will print the input from the file and the output for the solved Sudoku board. The program uses the first solution it finds and doesn't check for any others.

Here's an example run processing the puzzle from the Sudoku Wikipedia article:

$ sudoku-solver games/sudoku-solver/examples/wikipedia_article.txt
Input:

53- -7- ---
6-- 195 ---
-98 --- -6-

8-- -6- --3
4-- 8-3 --1
7-- -2- --6

-6- --- 28-
--- 419 --5
--- -8- -79

Solution:

534 678 912
672 195 348
198 342 567

859 761 423
426 853 791
713 924 856

961 537 284
287 419 635
345 286 179

There are several command line options, described in the help output:

sudoku-solver [ <option> ... ] <file-path>
 where <option> is one of
  --color : 
    Colorize values of the solution.
  --stats : 
    Print solver statistics.
    These consist of:
    - solver runtime
    - number of needed digit guesses
    - number of times the solver encountered each recursion level. When the
      solver consecutively tries the digits 1 to 9 at one recursion level, the
      count for that level is only increased by one, not by the number of
      digits tried. The initial recursion level of the solver is 1.
  --progress-text-file <text-file> : 
    Create a text file of the solution process.
    The format of the lines is "board-index --guess--> next-board-index".
    Board indices are numbered row-wise from 0 for the upper-left corner to 80
    for the lower-right corner of the board/grid. The line means that the
    solver could make a feasible guess `guess` at `board-index` that made it
    possible to continue with guesses at `next-board-index`. The lines are
    indented according to the recursion level.
  --progress-dot-file <dot-file> : 
    Create a DOT file for processing by Graphviz's `dot` command.
    The generated diagram shows the solution process. The interpretation of the
    graph is analoguous to the text output from `--progress-text-file` (see
    above).
  --help, -h : Show this help

Here's an example for the --progress-dot-file output turned into a PDF file.

The actual solver is in games/sudoku-solver/solver.rkt.

Use https://todo.sr.ht/~sschwarzer/sudoku-solver for tickets.