diff options
author | mhsn <mail@mhsn.net> | 2025-08-02 16:12:08 +0100 |
---|---|---|
committer | mhsn <mail@mhsn.net> | 2025-08-02 16:12:08 +0100 |
commit | 6f7c790cb1f1ec721b073c6f3b930f9054234822 (patch) | |
tree | baaca6811edafc9a358696339c9b05d6b26e66e9 /2024/04/rust/src | |
parent | 14359311f01bcaea6d2deaf980898b7f9598da19 (diff) | |
download | aoc-6f7c790cb1f1ec721b073c6f3b930f9054234822.tar.gz aoc-6f7c790cb1f1ec721b073c6f3b930f9054234822.zip |
2024-04 rust p2
Diffstat (limited to '2024/04/rust/src')
-rw-r--r-- | 2024/04/rust/src/main.rs | 21 |
1 files changed, 20 insertions, 1 deletions
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<char>) -> usize { .filter(|p| *p) .count() } + +fn gold(grid: &Grid<char>) -> 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::<Option<Vec<_>>>() + }) + .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() +} |