Skip to main content

pencil_puzzles/
lib.rs

1//! Generators, solvers and difficulty raters for pencil puzzles.
2//!
3//! Each genre is a module, behind a feature of the same name. All genres are
4//! enabled by default. To compile fewer genres, turn off default features and
5//! enable the ones you need.
6//!
7//! ```
8//! # #[cfg(feature = "kakurasu")] {
9//! use pencil_puzzles::Difficulty;
10//! use pencil_puzzles::kakurasu::{self, GenerateOptions};
11//!
12//! let mut options = GenerateOptions::new("6x6".parse().unwrap(), 42);
13//! options.difficulty = Some(Difficulty::Hard);
14//! let generated = kakurasu::generate(&options, &pencil_puzzles_core::Budget::unlimited()).unwrap();
15//! assert_eq!(generated.rating.level, Difficulty::Hard);
16//! # }
17//! ```
18//!
19//! # Features
20//!
21//! - `all-genres` (default): every genre.
22//! - One feature per genre, such as `kakurasu`.
23//! - `serde`: implements `Serialize` and `Deserialize` for each genre's
24//!   puzzles, solutions and ratings.
25
26#![forbid(unsafe_code)]
27#![warn(missing_docs)]
28
29pub use pencil_puzzles_core::*;
30
31/// Fillomino: regions numbered with their sizes, same sizes never touching.
32#[cfg(feature = "fillomino")]
33pub use pencil_puzzles_fillomino as fillomino;
34
35/// Hashi: islands joined by bridges matching their numbers.
36#[cfg(feature = "hashi")]
37pub use pencil_puzzles_hashi as hashi;
38/// Hitori: shade repeated numbers so that the unshaded cells stay connected.
39#[cfg(feature = "hitori")]
40pub use pencil_puzzles_hitori as hitori;
41
42/// Kakurasu: shade cells so that every row and column adds up to its clue.
43#[cfg(feature = "kakurasu")]
44pub use pencil_puzzles_kakurasu as kakurasu;
45
46/// Kakuro: digits in white cells adding up to the sums in the blocks.
47#[cfg(feature = "kakuro")]
48pub use pencil_puzzles_kakuro as kakuro;
49
50mod registry;
51pub use registry::{DynGenre, Generated, Input, RegistryError, find, genres, read};
52
53/// Sudoku: fill rows, columns and boxes with distinct digits.
54#[cfg(feature = "sudoku")]
55pub use pencil_puzzles_sudoku as sudoku;
56
57/// Nurikabe: numbered islands and one connected shaded sea.
58#[cfg(feature = "nurikabe")]
59pub use pencil_puzzles_nurikabe as nurikabe;