From 6941e0024cf1a0dd80fa6bddee1f68dfada3f401 Mon Sep 17 00:00:00 2001 From: Timothy Warren Date: Fri, 16 Dec 2022 16:05:52 -0500 Subject: [PATCH] A little more progress on day 12 part 1 --- aoc-shared/src/enums.rs | 7 +++++ aoc-shared/src/lib.rs | 2 ++ day12/src/main.rs | 67 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 76 insertions(+) create mode 100644 aoc-shared/src/enums.rs diff --git a/aoc-shared/src/enums.rs b/aoc-shared/src/enums.rs new file mode 100644 index 0000000..0b191e6 --- /dev/null +++ b/aoc-shared/src/enums.rs @@ -0,0 +1,7 @@ +#[derive(Debug, PartialEq, Copy, Clone)] +pub enum Direction { + Up, + Down, + Left, + Right, +} \ No newline at end of file diff --git a/aoc-shared/src/lib.rs b/aoc-shared/src/lib.rs index 67c5f33..4657362 100644 --- a/aoc-shared/src/lib.rs +++ b/aoc-shared/src/lib.rs @@ -1,4 +1,6 @@ pub mod grid; +pub mod enums; + pub use grid::*; #[macro_export] diff --git a/day12/src/main.rs b/day12/src/main.rs index 97a91c0..d8c5ca9 100644 --- a/day12/src/main.rs +++ b/day12/src/main.rs @@ -1,5 +1,64 @@ +use aoc_shared::enums::Direction; +use aoc_shared::grid::Grid as BaseGrid; +use aoc_shared::grid::Grid2d; +use aoc_shared::impl_grid_newtype; + +#[derive(Debug)] +struct Grid(BaseGrid); +impl_grid_newtype!(Grid, BaseGrid, char); + +impl Grid { + pub fn from_file_str(file_str: &str) -> Self { + let lines: Vec<&str> = file_str.lines().collect(); + let width = lines[0].len(); + + let mut grid = Grid::new(width); + lines + .into_iter() + .map(|line| line.chars()) + .for_each(|line_chars| grid.vec.append(&mut line_chars.collect::>())); + + grid + } + + fn find_pos(&self, value: char) -> Option { + self.vec.iter().position(|item| *item == value) + } + + fn find_start_and_end(&self) -> (usize, usize) { + let start = self.vec.iter().position(|item| *item == 'S').unwrap(); + let end = self.vec.iter().position(|item| *item == 'E').unwrap(); + + (start, end) + } +} + +// ---------------------------------------------------------------------------- + +#[derive(Debug)] +struct Pathfinder { + grid: Grid, + steps: Vec, +} + +impl Pathfinder { + pub fn from_file_str(file_str: &str) -> Self { + Pathfinder { + grid: Grid::from_file_str(file_str), + steps: Vec::new(), + } + } + + fn find_start_and_end(&self) -> (usize, usize) { + (self.grid.find_pos('S').unwrap(), self.grid.find_pos('E').unwrap()) + } +} + +// ---------------------------------------------------------------------------- + fn main() { let file_str = include_str!("input.txt"); + let mut finder = Pathfinder::from_file_str(file_str); } #[cfg(test)] @@ -9,4 +68,12 @@ mod tests { fn get_test_data() -> &'static str { include_str!("test-input.txt") } + + #[test] + fn get_start_end() { + let finder = Pathfinder::from_file_str(get_test_data()); + let (start, end) = finder.find_start_and_end(); + + assert_eq!((start, end), (0, 21)); + } }