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::*;