Sudoku solver library for Rust
This library provides a very simple backtracking algorithm for solving sudoku puzzles.
Examples
The solve()
function will yield the first solution found for a given puzzle,
or None
if no solution exists:
use sudoku_solver::*;
fn main() {
let board = Board::from(&[
[0, 2, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 6, 0, 0, 0, 0, 3], [0, 7, 4, 0, 8, 0, 0, 0, 0], [0, 0, 0, 0, 0, 3, 0, 0, 2], [0, 8, 0, 0, 4, 0, 0, 1, 0], [6, 0, 0, 5, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 7, 8, 0], [5, 0, 0, 0, 0, 9, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 4, 0], ]);
println!("Puzzle:\n{}\n", board);
if let Some(solution) = solve(&board) {
println!("Solution:\n{}\n", solution);
} else {
println!("No solution found.");
}
}
If a puzzle has multiple solutions and you want to iterate over them, you can use
SolutionIter
:
use sudoku_solver::*;
fn main() {
let board = Board::from(&[
[9, 0, 6, 0, 7, 0, 4, 0, 3], [0, 0, 0, 4, 0, 0, 2, 0, 0], [0, 7, 0, 0, 2, 3, 0, 1, 0], [5, 0, 0, 0, 0, 0, 1, 0, 0], [0, 4, 0, 2, 0, 8, 0, 6, 0], [0, 0, 3, 0, 0, 0, 0, 0, 5], [0, 3, 0, 7, 0, 0, 0, 5, 0], [0, 0, 7, 0, 0, 5, 0, 0, 0], [4, 0, 5, 0, 1, 0, 7, 0, 8], ]);
for solution in SolutionIter::new(&board) {
println!("Solution:\n{}\n", solution);
}
}