sudoku_plus/lib.rs
1// Copyright 2026 PARK Youngho.
2//
3// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
4// https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
5// <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your option.
6// This file may not be copied, modified, or distributed
7// except according to those terms.
8///////////////////////////////////////////////////////////////////////////////
9
10
11//! # __Sudoku-plus:__ An Expandable Sudoku Library
12//!
13//! `Sudoku-plus` is a versatile Rust library designed for providing
14//! various kinds of sudoku algorithms. It provides 2D plane sudoku algorithm,
15//! 3D multi-layer sudoku algorithm, and 3D cubic sudoku algorithm.
16//! They generates sudoku problems and solves sudoku problems. They are designed
17//! to be flexible and efficient, allowing users to easily create and solve
18//! sudoku puzzles of varying sizes and complexities. The library is built with
19//! a focus on performance and usability, making it suitable for both casual
20//! puzzle enthusiasts and developers looking to integrate sudoku functionality
21//! into their applications. `sudoku-plus` is a versatile Rust library designed
22//! for generating and solving various Sudoku structures,
23//! including __Plane__, __Multi-layer__, and __Cubic__ Sudoku.
24//!
25//! # Roadmap for Version 1.0
26//!
27//! The following features are planned for the sudoku-plus ecosystem.
28//! - [X] __Completed:__ Implementation and documentation are
29//! at least __95%__ complete.
30//! - [ ] __In Progress:__ Implementation or documentation is below __95%__,
31//! or work has not yet begun.
32//!
33//! # 1. 2D Sudoku
34//!
35//! - [X] __PlaneSudoku:__ A generic 2D Sudoku with a (N^2 X N^2) grid.
36//! You can define the size by choosing the constant `N`. --
37//! [PlaneSudoku](plane_sudoku/struct.PlaneSudoku.html#struct.PlaneSudoku)
38//!
39//! # 2. 3D Sudoku
40//!
41//! - [ ] __Multi-layer Sudoku:__ A 3D Sudoku structure with dimensions of
42//! (N^2 X N^2 X N^2). The size is determined by the constant `N`. --
43//! [MultiLayerSudoku](multi_layer_sudoku/struct.MultiLayerSudoku.html#struct.MultiLayerSudoku)
44//! - [ ] __Cubic Sudoku:__ A 3D Sudoku structure with dimensions of (N^3 X N^3 X N^3). The size is determined by the constant `N`. --
45//! [CubicSudoku](cubic_sudoku/struct.CubicSudoku.html#struct.CubicSudoku)
46//!
47//! # 3. Sudoku Elements
48//!
49//! - [ ] __Sudoku Element:__ A generic Sudoku component designed for building
50//! complex applications, such as academic timetable generators powered by
51//! Sudoku algorithms. For the future use, this trait `SudokuElement` is
52//! defined for sudoku elements. It is supposed to be implemented by any data
53//! type that supports cryptocol::number::SmallUInt. It can be removed in the
54//! future if it is found not necessary. --
55//! [SudokuElement](sudoku_element/struct.SudokuElement.html#struct.SudokuElement).
56//!
57//! # Versioning Policy
58//!
59//! The project will reach Version 1.0.0 once all functional areas listed above
60//! are fully implemented.
61//!
62//! - __Pre-v1.0:__ Versions will range up to 0.3.x based on the progress of the
63//! listed functionalities.
64//! - __Post-v1.0:__ New features and stable releases will follow standard
65//! semantic versioning beyond 1.0.0.
66//!
67//! _Note: Version numbers like 0.2.0 indicate progress through the
68//! functionality list, not necessarily a 20% completion of the entire codebase.
69
70/// The `plane_sudoku` module provides the struct `PlaneSudoku`
71/// for 2D plane sudoku.
72pub mod plane_sudoku;
73
74/// The `multi_layer_Sudoku` module provides the struct `MultiLayerSudoku`
75/// for 3D multi-layer sudoku.
76pub mod multi_layer_sudoku;
77
78/// The `cubic_sudoku` module provides the struct `CubicSudoku`
79/// for 3D cubic sudoku.
80pub mod cubic_sudoku;
81
82/// The `sudoku_element` module provides the trait `SudokuElement`
83/// for sudoku elements.
84pub mod sudoku_element;
85
86pub use plane_sudoku::PlaneSudoku;
87pub use multi_layer_sudoku::MultiLayerSudoku;
88pub use cubic_sudoku::CubicSudoku;
89pub use sudoku_element::SudokuElement;
90
91pub use plane_sudoku::PlaneSudoku_4X4;
92pub use plane_sudoku::PlaneSudoku_9X9;
93pub use plane_sudoku::PlaneSudoku_16X16;
94pub use plane_sudoku::PlaneSudoku_25X25;
95pub use plane_sudoku::PlaneSudoku_36X36;
96pub use plane_sudoku::PlaneSudoku_49X49;
97pub use plane_sudoku::PlaneSudoku_64X64;
98pub use plane_sudoku::PlaneSudoku_81X81;
99pub use plane_sudoku::PlaneSudoku_100X100;
100pub use plane_sudoku::PlaneSudoku_121X121;
101pub use plane_sudoku::PlaneSudoku_144X144;
102pub use plane_sudoku::PlaneSudoku_169X169;
103pub use plane_sudoku::PlaneSudoku_196X196;
104pub use plane_sudoku::PlaneSudoku_225X225;
105pub use plane_sudoku::PlaneSudoku_289X289;
106pub use plane_sudoku::PlaneSudoku_324X324;
107pub use plane_sudoku::PlaneSudoku_361X361;
108pub use plane_sudoku::PlaneSudoku_400X400;
109
110pub use multi_layer_sudoku::MultiLayerSudoku_4X4X4;
111pub use multi_layer_sudoku::MultiLayerSudoku_9X9X9;
112pub use multi_layer_sudoku::MultiLayerSudoku_16X16X16;
113pub use multi_layer_sudoku::MultiLayerSudoku_25X25X25;
114pub use multi_layer_sudoku::MultiLayerSudoku_36X36X36;
115pub use multi_layer_sudoku::MultiLayerSudoku_49X49X49;
116pub use multi_layer_sudoku::MultiLayerSudoku_64X64X64;
117pub use multi_layer_sudoku::MultiLayerSudoku_81X81X81;
118pub use multi_layer_sudoku::MultiLayerSudoku_100X100X100;
119pub use multi_layer_sudoku::MultiLayerSudoku_121X121X121;
120pub use multi_layer_sudoku::MultiLayerSudoku_144X144X144;
121pub use multi_layer_sudoku::MultiLayerSudoku_169X169X169;
122pub use multi_layer_sudoku::MultiLayerSudoku_196X196X196;
123pub use multi_layer_sudoku::MultiLayerSudoku_225X225X225;
124pub use multi_layer_sudoku::MultiLayerSudoku_289X289X289;
125pub use multi_layer_sudoku::MultiLayerSudoku_324X324X324;
126pub use multi_layer_sudoku::MultiLayerSudoku_361X361X361;
127pub use multi_layer_sudoku::MultiLayerSudoku_400X400X400;