summaryrefslogtreecommitdiff
path: root/src/solvers/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/solvers/mod.rs')
-rw-r--r--[-rwxr-xr-x]src/solvers/mod.rs30
1 files changed, 27 insertions, 3 deletions
diff --git a/src/solvers/mod.rs b/src/solvers/mod.rs
index 1bdc228..189deca 100755..100644
--- a/src/solvers/mod.rs
+++ b/src/solvers/mod.rs
@@ -1,5 +1,29 @@
//pub mod incremental_block;
-pub mod intuitive;
-//#[cfg(feature = "gpu")]
+pub mod gpu;
pub mod gpusolver;
-pub mod opencl;
+pub mod single;
+
+use crate::structs::StoneWall;
+pub use gpu::*;
+
+/// calculate h and w
+pub fn wall_stats(n: u32) -> (u32, u32) {
+ let h = (n >> 1) + 1;
+ (h, (n - 1) * h)
+}
+
+pub trait Solver {
+ fn new(n: u32) -> Self;
+ fn n(&self) -> u32;
+ fn h(&self) -> u32;
+ fn w(&self) -> u32;
+}
+
+pub trait FirstSolver {
+ fn solve(self) -> StoneWall;
+}
+
+pub trait IteratorSolver: Solver {
+ type IntoIter: Iterator<Item = StoneWall>;
+ fn solve(self) -> Self::IntoIter;
+}