diff options
author | mhsn <mail@mhsn.net> | 2025-08-16 16:09:20 +0100 |
---|---|---|
committer | mhsn <mail@mhsn.net> | 2025-08-16 16:09:20 +0100 |
commit | b59fb691913017d4b3cc032cebcb990ab9315438 (patch) | |
tree | 85cb5f6614fe9e0ca6680ead4e6df99db784c7e5 /2024/04/rust | |
parent | bad7e3ba730e87bc1fcb2202830aa97e04096e5e (diff) | |
download | aoc-b59fb691913017d4b3cc032cebcb990ab9315438.tar.gz aoc-b59fb691913017d4b3cc032cebcb990ab9315438.zip |
rust 2024 04: redo p2
Diffstat (limited to '2024/04/rust')
-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() } |