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