Day 2: make proximity check more generically applicable
This commit is contained in:
parent
66728f862e
commit
36400e5636
|
@ -71,7 +71,7 @@ impl Number {
|
||||||
}
|
}
|
||||||
numbers
|
numbers
|
||||||
}
|
}
|
||||||
fn is_part(&self, grid: Grid) -> bool {
|
fn proximity_check(&self, grid: Grid, check: impl Fn(char, (usize, usize)) -> bool) -> bool {
|
||||||
for digit_index in self.location.clone() {
|
for digit_index in self.location.clone() {
|
||||||
for xoff in [-1_i32, 0, 1] {
|
for xoff in [-1_i32, 0, 1] {
|
||||||
for yoff in [-1_i32, 0, 1] {
|
for yoff in [-1_i32, 0, 1] {
|
||||||
|
@ -98,7 +98,7 @@ impl Number {
|
||||||
.unwrap_or_else(|_| panic!("bad xoff {xoff} at digit index {digit_index}"));
|
.unwrap_or_else(|_| panic!("bad xoff {xoff} at digit index {digit_index}"));
|
||||||
let x = digit_index.min(line.len() - 1);
|
let x = digit_index.min(line.len() - 1);
|
||||||
let chr = line[x];
|
let chr = line[x];
|
||||||
if chr != '.' && !chr.is_ascii_digit() {
|
if check(chr, (x, y)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -106,4 +106,7 @@ impl Number {
|
||||||
}
|
}
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
fn is_part(&self, grid: Grid) -> bool {
|
||||||
|
self.proximity_check(grid, |chr, _| chr != '.' && !chr.is_ascii_digit())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue