]> aoc.elinar.fr Git - aoc_2024/commitdiff
Refactor day06 - part1
authoralex <>
Fri, 6 Dec 2024 09:30:18 +0000 (10:30 +0100)
committeralex <>
Fri, 6 Dec 2024 09:30:18 +0000 (10:30 +0100)
src/day06.rs

index 9cd6be8cff36db56032ccf995ff1c304b0f84316..20566335b3b09be3a31346470210e516179945ca 100644 (file)
@@ -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<dyn Error>> {
@@ -50,30 +72,11 @@ fn get_day() -> String {
 fn run_part1(input: &str) -> Result<u32, Box<dyn Error>> {
     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;