summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDennis Kobert <dennis@kobert.dev>2019-12-20 06:47:20 +0100
committerDennis Kobert <dennis@kobert.dev>2019-12-20 06:47:20 +0100
commita39405f8e26bdd4db304fe1ea13dccf9400d0445 (patch)
treeb54d4cfa8dfd54ff0c2c17480cc8c3a710b6af31
parent23d0e1aee04a352cd028a867b15dfa3fe26006aa (diff)
Add bit operation wrapper funftions
-rw-r--r--src/solvers.rs17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/solvers.rs b/src/solvers.rs
index 9bf0ad6..7e17b38 100644
--- a/src/solvers.rs
+++ b/src/solvers.rs
@@ -74,6 +74,21 @@ impl<T: num::PrimInt> Solver<T> {
}
pub fn solve(&mut self) -> Wall {
- Wall::create_empty(self.w)
+ let wall = Wall::create_empty(self.w);
+ wall.heights
+ .iter()
+ .take(2)
+ .zip(0..1)
+ .for_each(|(x, i)| self.set_stone(*x as usize, i));
+ wall
+ }
+
+ fn set_stone(&mut self, row: usize, stone: u32) {
+ self.solve_stack[row] =
+ self.solve_stack[row] | T::from(1 << stone).expect("Stone placing index out of bounds");
+ }
+
+ fn get_stone(&self, row: usize, stone: u32) {
+ self.solve_stack[row] & T::from(1 << stone).expect("Requested stone index out of bounds");
}
}