From: alex <> Date: Fri, 6 Dec 2024 09:30:18 +0000 (+0100) Subject: Refactor day06 - part1 X-Git-Url: https://aoc.elinar.fr/?a=commitdiff_plain;h=e408f160b6c1eeb6a514c464918479fd77734aae;p=aoc_2024 Refactor day06 - part1 --- diff --git a/src/day06.rs b/src/day06.rs index 9cd6be8..2056633 100644 --- a/src/day06.rs +++ b/src/day06.rs @@ -30,6 +30,28 @@ impl Puzzle { start, } } + + fn guard_path(self: &mut Self) { + let mut turn_right: HashMap<(isize, isize), (isize, isize)> = HashMap::new(); + turn_right.insert((-1,0), (0,1)); + turn_right.insert((0,1), (1,0)); + turn_right.insert((1,0), (0,-1)); + turn_right.insert((0,-1), (-1,0)); + + let mut pos: (isize, isize) = self.start; + let mut dir: (isize, isize) = (-1, 0); + while self.map.contains_key(&pos) { + let mut c = self.map.get_mut(&pos).unwrap(); + if "^.".contains(*c) { + *c = 'X'; + } + if "#".contains(*c) { + pos = (pos.0 - dir.0, pos.1 - dir.1); + dir = *turn_right.get(&dir).unwrap(); + } + pos = (pos.0 + dir.0, pos.1 + dir.1); + } + } } pub fn run(input: &str) -> Result<(), Box> { @@ -50,30 +72,11 @@ fn get_day() -> String { fn run_part1(input: &str) -> Result> { println!("Running {} - part 1", get_day()); - let mut turn_right: HashMap<(isize, isize), (isize, isize)> = HashMap::new(); - turn_right.insert((-1,0), (0,1)); - turn_right.insert((0,1), (1,0)); - turn_right.insert((1,0), (0,-1)); - turn_right.insert((0,-1), (-1,0)); - - let puzzle = Puzzle::new(input); - - let mut map = puzzle.map; - let mut pos: (isize, isize) = puzzle.start; - let mut dir: (isize, isize) = (-1, 0); - while map.contains_key(&pos) { - let mut c = map.get_mut(&pos).unwrap(); - if "^.".contains(*c) { - *c = 'X'; - } - if "#".contains(*c) { - pos = (pos.0 - dir.0, pos.1 - dir.1); - dir = *turn_right.get(&dir).unwrap(); - } - pos = (pos.0 + dir.0, pos.1 + dir.1); - } + let mut puzzle = Puzzle::new(input); + + puzzle.guard_path(); - let res = map.into_iter() + let res = puzzle.map.into_iter() .filter(|(_, c)| *c == 'X') .count() as u32;