diff options
Diffstat (limited to '2024/04/rust/src/main.rs')
-rw-r--r-- | 2024/04/rust/src/main.rs | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/2024/04/rust/src/main.rs b/2024/04/rust/src/main.rs index e2810bb..191e461 100644 --- a/2024/04/rust/src/main.rs +++ b/2024/04/rust/src/main.rs @@ -54,20 +54,29 @@ fn silver(grid: &Grid) -> usize { let xmases: Vec<Vec<((isize, isize), char)>> = dirs .iter() .map(|(dx, dy)| { - (1..4) + (0..4) .map(move |n| (dx * n, dy * n)) - .zip("MAS".chars()) + .zip("XMAS".chars()) .collect() }) .collect(); grid.pts() - .filter(|&p| grid.at(p).is_some_and(|&c| c == 'X')) .flat_map(|p| xmases.iter().map(move |xmas| grid.check(p, xmas.iter()))) .filter(|p| *p) .count() } fn gold(grid: &Grid) -> usize { - 0 + let dirs = vec![(-1, -1), (1, -1), (0, 0), (-1, 1), (1, 1)]; + + let xmases: Vec<Vec<((isize, isize), char)>> = vec!["MMASS", "SMASM", "SSAMM", "MSAMS"] + .iter() + .map(|x| dirs.clone().into_iter().zip(x.chars()).collect()) + .collect(); + + grid.pts() + .flat_map(|p| xmases.iter().map(move |xmas| grid.check(p, xmas.iter()))) + .filter(|p| *p) + .count() } |