]> aoc.elinar.fr Git - aoc_2023/commitdiff
Day16 - part 2
authoralex <null>
Sun, 17 Dec 2023 00:25:38 +0000 (01:25 +0100)
committeralex <null>
Sun, 17 Dec 2023 00:25:38 +0000 (01:25 +0100)
src/day16.rs

index a126ab2f8bfb7f2a4478db54eb8cc4782f887922..6bd0c7271af6886443512b87b011c3a384833aa1 100644 (file)
@@ -191,6 +191,14 @@ impl Puzzle {
 
         res
     }
+
+    pub fn reset_seen(&mut self) {
+        self.seen = vec![
+            vec![ Seen { top: false, right: false, bottom: false, left: false }; self.width]
+            ;
+            self.height
+        ];
+    }
 }
 
 fn run_part1(input: &str) -> Result<u64, Box<dyn Error>> {
@@ -209,7 +217,45 @@ fn run_part1(input: &str) -> Result<u64, Box<dyn Error>> {
 
 fn run_part2(input: &str) -> Result<u64, Box<dyn Error>> {
     println!("Running day16 - part 2");
-    let res = 0;
+
+    let mut puzzle = Puzzle::new(input);
+
+    // le rayon provient de n'importe quelle case extérieure
+    let mut res: Vec<u64> = Vec::new();
+
+    // on teste le départ depuis toutes les cases verticales
+    (1..(puzzle.height - 1)).for_each(|i| {
+        let (direction, pos) = puzzle.get_next_from_left((i, 0))[0];
+        puzzle.move_beam(pos, direction);
+        res.push(puzzle.energized_tiles());
+
+        puzzle.reset_seen();
+
+        let (direction, pos) = puzzle.get_next_from_right((i, puzzle.width - 1))[0];
+        puzzle.move_beam(pos, direction);
+        res.push(puzzle.energized_tiles());
+
+        puzzle.reset_seen();
+    });
+
+    // on teste le départ depuis toutes les cases horizontales
+    (1..(puzzle.width - 1)).for_each(|i| {
+        let (direction, pos) = puzzle.get_next_from_top((0, i))[0];
+        puzzle.move_beam(pos, direction);
+        res.push(puzzle.energized_tiles());
+
+        puzzle.reset_seen();
+
+        let (direction, pos) = puzzle.get_next_from_bottom((puzzle.height - 1, i))[0];
+        puzzle.move_beam(pos, direction);
+        res.push(puzzle.energized_tiles());
+
+        puzzle.reset_seen();
+    });
+
+    //println!("{:?}", res);
+
+    let res = res.into_iter().max().unwrap();
     Ok(res)
 }
 
@@ -237,6 +283,6 @@ mod tests {
     #[test]
     fn day16_part2() {
         let res = run_part2(TEXT_INPUT);
-        assert_eq!(0, res.unwrap());
+        assert_eq!(51, res.unwrap());
     }
 }