From 1f638fc7c7fb401b4c128ccc664b634ac6de8592 Mon Sep 17 00:00:00 2001 From: Johannes Date: Wed, 4 Dec 2024 06:51:35 +0100 Subject: [PATCH] day 4 part 2 --- src/day04.rs | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/src/day04.rs b/src/day04.rs index f427543..b8f7c03 100644 --- a/src/day04.rs +++ b/src/day04.rs @@ -62,8 +62,39 @@ fn diags(m: &HashMap<(usize, usize), char>) -> usize { count } -fn part2(_input: &str) -> RiddleResult { - 0 +fn part2(input: &str) -> RiddleResult { + let mut puzzle = HashMap::<(usize, usize), char>::new(); + input.lines().enumerate().for_each(|(y, line)| { + line.chars().enumerate().for_each(|(x, chr)| { + puzzle.insert((x, y), chr); + }) + }); + let mut count = 0; + let xmax = puzzle.keys().map(|k| k.0).max().unwrap(); + let ymax = puzzle.keys().map(|k| k.1).max().unwrap(); + for sx in 1..xmax { + for sy in 1..ymax { + let first = [ + puzzle[&(sx - 1, sy - 1)], + puzzle[&(sx, sy)], + puzzle[&(sx + 1, sy + 1)], + ] + .into_iter() + .join(""); + let second = [ + puzzle[&(sx - 1, sy + 1)], + puzzle[&(sx, sy)], + puzzle[&(sx + 1, sy - 1)], + ] + .into_iter() + .join(""); + if (first == "MAS" || first == "SAM") && (second == "SAM" || second == "MAS") { + count += 1; + } + } + } + + count } #[cfg(test)] @@ -89,6 +120,6 @@ MXMXAXMASX #[test] fn test2() { - assert_eq!(part2(TEST_INPUT), 0); + assert_eq!(part2(TEST_INPUT), 9); } }