From 6f7c790cb1f1ec721b073c6f3b930f9054234822 Mon Sep 17 00:00:00 2001 From: mhsn Date: Sat, 2 Aug 2025 16:12:08 +0100 Subject: 2024-04 rust p2 --- 2024/04/rust/src/main.rs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to '2024') diff --git a/2024/04/rust/src/main.rs b/2024/04/rust/src/main.rs index f3b152c..f1f464f 100644 --- a/2024/04/rust/src/main.rs +++ b/2024/04/rust/src/main.rs @@ -11,7 +11,7 @@ fn main() -> io::Result<()> { let grid = Grid::new(grid); let silver: usize = silver(&grid); - let gold: u64 = 0; + let gold: usize = gold(&grid); println!("silver: {silver}"); println!("gold: {gold}"); @@ -25,3 +25,22 @@ fn silver(grid: &Grid) -> usize { .filter(|p| *p) .count() } + +fn gold(grid: &Grid) -> usize { + let xmas: Vec<(i64, i64)> = vec![(0, 0), (-1, -1), (1, -1), (-1, 1), (1, 1)]; + grid.points() + .map(move |p| { + xmas.iter() + .map(|&d| grid.move_pos(p, d.into(), 1).and_then(|p| grid.at(p))) + .collect::>>() + }) + .flatten() + .map(|cs| { + vec!["AMSMS", "AMMSS", "ASMSM", "ASSMM"] + .iter() + .map(|x| cs.iter().eq_by(x.chars(), |&&a, b| a == b)) + .any(|p| p) + }) + .filter(|p| *p) + .count() +} -- cgit v1.2.3