From: alex <> Date: Tue, 10 Dec 2024 09:04:04 +0000 (+0100) Subject: Day10 - part 2 X-Git-Url: https://aoc.elinar.fr/?a=commitdiff_plain;h=69857d7afb93719ee211d18243e69b36e1c58ce8;p=aoc_2024 Day10 - part 2 --- diff --git a/src/day10.rs b/src/day10.rs index 57b56a8..aefb7eb 100644 --- a/src/day10.rs +++ b/src/day10.rs @@ -50,6 +50,30 @@ impl Puzzle { }) .sum() } + + fn rating(self: &Self, pos: (isize, isize), value: u8) -> u32 { + [(-1,0), (0,1), (1,0), (0,-1)].iter() + .map(|dij| (pos.0 + dij.0 as isize, pos.1 + dij.1 as isize)) + .map(|new_pos| { + match self.map.get(&new_pos) { + Some(&value_next) => { + if value_next == value + 1 { + if value_next == b'9' { + 1 + } + else { + self.rating(new_pos, value_next) + } + } + else { + 0 + } + }, + _ => { 0 } + } + }) + .sum() + } } fn run_part1(input: &str) -> Result> { @@ -69,7 +93,12 @@ fn run_part1(input: &str) -> Result> { fn run_part2(input: &str) -> Result> { println!("Running {} - part 2", get_day()); - Ok(0) + let puzzle = Puzzle::new(input); + let res = puzzle.start_pos.iter() + .map(|pos| puzzle.rating(*pos, b'0')) + .sum(); + + Ok(res) } pub fn run(input: &str) -> Result<(), Box> { @@ -120,6 +149,7 @@ mod tests { ...8..3 ...9..2 .....01"; + static TEXT_INPUT: &str = "\ 89010123 78121874 @@ -130,6 +160,22 @@ mod tests { 01329801 10456732"; + static TEXT_INPUT_4: &str = "\ +.....0. +..4321. +..5..2. +..6543. +..7..4. +..8765. +..9...."; + static TEXT_INPUT_5: &str = "\ +012345 +123456 +234567 +345678 +4.6789 +56789."; + #[test] fn test_part1() { assert_eq!(1, run_part1(TEXT_INPUT_0).unwrap()); @@ -141,6 +187,9 @@ mod tests { #[test] fn test_part2() { - assert_eq!(0, run_part2(TEXT_INPUT).unwrap()); + assert_eq!(3, run_part2(TEXT_INPUT_4).unwrap()); + assert_eq!(13, run_part2(TEXT_INPUT_2).unwrap()); + assert_eq!(227, run_part2(TEXT_INPUT_5).unwrap()); + assert_eq!(81, run_part2(TEXT_INPUT).unwrap()); } }