Day 9 simplify neighbors

This commit is contained in:
kageru 2021-12-09 11:10:21 +01:00
parent 2a1c7ee382
commit 96877c6359

View File

@ -15,9 +15,8 @@ fn part1(parsed: &Parsed) -> usize {
.filter_map(|(x, y)| {
// There’s gotta be some incomplete_windows or similar that makes this not as horrible
let cur = parsed[x][y];
[Step::XP, Step::XM, Step::YP, Step::YM]
all_neighbors(x, y)
.into_iter()
.filter_map(|s| try_step(x, y, s))
.filter_map(|(x, y)| parsed.get(x).and_then(|ys| ys.get(y)))
.all(|&n| n > cur)
.then(|| cur as usize + 1)
@ -25,16 +24,11 @@ fn part1(parsed: &Parsed) -> usize {
.sum()
}
#[rustfmt::skip]
enum Step { XP, XM, YP, YM }
fn try_step(x: usize, y: usize, step: Step) -> Option<(usize, usize)> {
match step {
Step::XP => Some((x.checked_add(1)?, y)),
Step::XM => Some((x.checked_sub(1)?, y)),
Step::YP => Some((x, y.checked_add(1)?)),
Step::YM => Some((x, y.checked_sub(1)?)),
}
fn all_neighbors(x: usize, y: usize) -> Vec<(usize, usize)> {
[x.checked_add(1).map(|x| (x, y)), x.checked_sub(1).map(|x| (x, y)), y.checked_add(1).map(|y| (x, y)), y.checked_sub(1).map(|y| (x, y))]
.into_iter()
.flatten()
.collect()
}
fn part2(parsed: &Parsed) -> usize {