sudoku_solver/
lib.rs

1//! # Sudoku solver library
2//!
3//! This library provides a very simple backtracking algorithm for solving sudoku puzzles.
4//!
5//! ## Examples
6//!
7//! The [`solve()`] function will yield the first solution found for a given puzzle, or `None` if
8//! no solution exists:
9//!
10//! ```rust
11//! # use sudoku_solver::*;
12//! let board = Board::from(&[
13//!     [0, 2, 0, 0, 0, 0, 0, 0, 0], // row 1
14//!     [0, 0, 0, 6, 0, 0, 0, 0, 3], // row 2
15//!     [0, 7, 4, 0, 8, 0, 0, 0, 0], // row 3
16//!     [0, 0, 0, 0, 0, 3, 0, 0, 2], // row 4
17//!     [0, 8, 0, 0, 4, 0, 0, 1, 0], // row 5
18//!     [6, 0, 0, 5, 0, 0, 0, 0, 0], // row 6
19//!     [0, 0, 0, 0, 1, 0, 7, 8, 0], // row 7
20//!     [5, 0, 0, 0, 0, 9, 0, 0, 0], // row 8
21//!     [0, 0, 0, 0, 0, 0, 0, 4, 0], // row 9
22//! ]);
23//!
24//! println!("Puzzle:\n{}\n", board);
25//!
26//! if let Some(solution) = solve(&board) {
27//!     println!("Solution:\n{}\n", solution);
28//! } else {
29//!     println!("No solution found.");
30//! }
31//! ```
32//!
33//! If a puzzle has multiple solutions and you want to iterate over them, you can use
34//! [`SolutionIter`]:
35//!
36//! ```rust
37//! # fn main() {
38//! # use sudoku_solver::*;
39//! let board = Board::from(&[
40//!     [9, 0, 6, 0, 7, 0, 4, 0, 3], // row 1
41//!     [0, 0, 0, 4, 0, 0, 2, 0, 0], // row 2
42//!     [0, 7, 0, 0, 2, 3, 0, 1, 0], // row 3
43//!     [5, 0, 0, 0, 0, 0, 1, 0, 0], // row 4
44//!     [0, 4, 0, 2, 0, 8, 0, 6, 0], // row 5
45//!     [0, 0, 3, 0, 0, 0, 0, 0, 5], // row 6
46//!     [0, 3, 0, 7, 0, 0, 0, 5, 0], // row 7
47//!     [0, 0, 7, 0, 0, 5, 0, 0, 0], // row 8
48//!     [4, 0, 5, 0, 1, 0, 7, 0, 8], // row 9
49//! ]);
50//!
51//! let solutions = SolutionIter::new(&board);
52//!
53//! assert_eq!(solutions.count(), 2);
54//! # }
55//! ```
56
57#![doc(html_root_url = "https://docs.rs/sudoku-solver/0.6.1")]
58
59pub mod board;
60pub mod solver;
61
62pub use board::*;
63pub use solver::*;