add neighbour and cardinal iterators to grid
This commit is contained in:
@@ -10,11 +10,10 @@ fn parse(input: &str) -> Grid<u8> {
|
||||
fn part1(input: &Grid<u8>) -> u64 {
|
||||
(0..input.height() * input.width())
|
||||
.filter(|i| *input.get(&input.coord(*i as i64).unwrap()).unwrap() == b'@')
|
||||
.map(|i| input.neighbours_count(input.coord(i as i64).unwrap(), |c| *c == b'@'))
|
||||
.map(|i| input.neighbours_count(&input.coord(i as i64).unwrap(), |c| *c == b'@'))
|
||||
.filter(|n| *n < 4)
|
||||
.count() as u64
|
||||
}
|
||||
|
||||
#[aoc(day4, part2)]
|
||||
fn part2(input: &Grid<u8>) -> u64 {
|
||||
let mut grid = input.clone();
|
||||
@@ -25,7 +24,7 @@ fn part2(input: &Grid<u8>) -> u64 {
|
||||
for i in 0..grid.width() * grid.height() {
|
||||
let pos = grid.coord(i as i64).unwrap();
|
||||
if grid.get(&pos).is_some_and(|c| *c == b'@')
|
||||
&& grid.neighbours_count(pos, |c| *c == b'@') < 4
|
||||
&& grid.neighbours_count(&pos, |c| *c == b'@') < 4
|
||||
{
|
||||
// remove the roll
|
||||
grid.set(&pos, b'.');
|
||||
|
||||
Reference in New Issue
Block a user