From edaccaaf15a526714f3de4e9e044341abd037885 Mon Sep 17 00:00:00 2001 From: natrixaeria Date: Thu, 2 Jan 2020 15:34:07 +0100 Subject: Start to implement incremental block solver --- src/solvers/solver1.rs | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/solvers/solver1.rs (limited to 'src/solvers/solver1.rs') 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, + 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 +} + +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 { + let w = self.w(); + if let Some(state) = self.states.last() { + } + } + + fn n(&self) -> u32 { + self.n + } +} -- cgit v1.2.3-54-g00ecf