73d8afc8d3
Transcribe the hard 9x9 Sudoku puzzle from the provided image into the plain-text example format accepted by the solver. The new example gives users a ready-made input file for manual CLI checks. Document the example directory in the README project decomposition and include a command showing how to run the solver against this puzzle. Test Plan: - cargo run -- sudoku-examples/hard.sudoku Refs: none
59 lines
1.7 KiB
Markdown
59 lines
1.7 KiB
Markdown
# sudoku-ai
|
|
|
|
`sudoku-ai` solves plain-text Sudoku files from the command line:
|
|
|
|
```sh
|
|
./sudoku-ai <sudoku_file>
|
|
```
|
|
|
|
Input is a whitespace-separated grid. Use `0` for empty cells and decimal
|
|
values for filled cells:
|
|
|
|
```text
|
|
0 2 3 0 0 0 4 5 0
|
|
0 0 0 0 0 0 0 0 0
|
|
0 0 0 0 0 0 0 0 0
|
|
0 0 0 0 0 0 0 0 0
|
|
0 0 0 0 0 0 0 0 0
|
|
0 0 0 0 0 0 0 0 0
|
|
0 0 0 0 0 0 0 0 0
|
|
0 0 0 0 0 0 0 0 0
|
|
0 0 0 0 0 0 0 0 0
|
|
```
|
|
|
|
The grid width must equal the grid height, and the size must have square
|
|
blocks. That supports layouts such as 4x4 with 2x2 blocks, 9x9 with 3x3
|
|
blocks, and 16x16 with 4x4 blocks.
|
|
|
|
Example puzzles live in `sudoku-examples/`. For instance:
|
|
|
|
```sh
|
|
cargo run -- sudoku-examples/hard.sudoku
|
|
```
|
|
|
|
## Project Decomposition
|
|
|
|
- Command-line interface: `src/main.rs`
|
|
- Parses the `./sudoku-ai <sudoku_file>` argument shape.
|
|
- Reads puzzle text from disk.
|
|
- Prints the solved grid or a user-facing error.
|
|
- Example puzzles: `sudoku-examples/`
|
|
- Stores reusable plain-text Sudoku inputs for manual solver checks.
|
|
- Solver library: `src/lib.rs`
|
|
- Plain-text parser
|
|
- Ignores blank lines.
|
|
- Validates square dimensions, block shape, and value ranges.
|
|
- Constraint model
|
|
- Stores each candidate set in a `u128` bit mask.
|
|
- Precomputes row, column, and block units for each cell.
|
|
- Precomputes peer cells for fast candidate elimination.
|
|
- Deduction engine
|
|
- Propagates placed values to all peers.
|
|
- Fills naked singles when a cell has one candidate.
|
|
- Fills hidden singles when a unit has one possible place for a value.
|
|
- Search engine
|
|
- Runs deduction until it stalls.
|
|
- Chooses the unsolved cell with the fewest candidates.
|
|
- Tries high-impact candidates first, then resumes deduction after each
|
|
assumption.
|