diff options
author | Dennis Kobert <dennis@kobert.dev> | 2020-01-02 14:47:39 +0000 |
---|---|---|
committer | Dennis Kobert <dennis@kobert.dev> | 2020-01-02 14:47:39 +0000 |
commit | 82a65a82873c6699f12c9c6186705e0089c58240 (patch) | |
tree | 42e26ecacdee54cc9b80fa9956bc956ed692b31f /src/solvers/solver1.rs | |
parent | 20aaa152b25121f992480452a270ba1e0d5b5dd3 (diff) | |
parent | edaccaaf15a526714f3de4e9e044341abd037885 (diff) |
Merge branch 'master' of /var/repos/babel
Diffstat (limited to 'src/solvers/solver1.rs')
-rw-r--r-- | src/solvers/solver1.rs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/solvers/solver1.rs b/src/solvers/solver1.rs new file mode 100644 index 0000000..ab1fbd1 --- /dev/null +++ b/src/solvers/solver1.rs @@ -0,0 +1,51 @@ +use crate::structs::{StoneWall, GapHeights}; + +#[derive(Clone)] +struct State { + stones_used: Vec<bool>, + gaps: GapHeights, +} + +impl State { + fn from_gaps(gaps: GapHeights, n: u32) -> Self { + let h = n/2 + 1; + Self { + stones_used: vec![false; n * h], + gaps + } + } + + fn stone_used(&self, n: u32, h: u32) -> bool { + self.stones_used.get() + } + + fn as_wall(&self, n: u32) -> StoneWall { + self.gaps.as_stone_wall(n) + } +} + +struct RecursiveSolver { + n: u32, + states: Vec<GapHeights> +} + +impl Sover for RecursiveSolver { + fn new(n: u32) -> Self { + let w = (n/2 + 1) * (n - 1); + let gaps = GapHeights::create_empty(w); + Self { + n, + states: vec![State::from_gaps(gaps)] + } + } + + fn solve(&mut self) -> Option<StoneWall> { + let w = self.w(); + if let Some(state) = self.states.last() { + } + } + + fn n(&self) -> u32 { + self.n + } +} |