Implement 2025 - Day 4 - Part 2
This commit is contained in:
39
2025/04.rs
39
2025/04.rs
@@ -11,7 +11,7 @@ enum Cell {
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let grid: Vec<_> = CONTENT.lines().map(|l| l.trim()).filter(|l| !l.is_empty()).map(|l| {
|
||||
let mut grid: Vec<_> = CONTENT.lines().map(|l| l.trim()).filter(|l| !l.is_empty()).map(|l| {
|
||||
l.chars().map(|c| match c {
|
||||
'.' => Cell::Empty,
|
||||
'@' => Cell::PRoll,
|
||||
@@ -20,23 +20,36 @@ fn main() {
|
||||
}).collect();
|
||||
|
||||
let mut result = 0;
|
||||
for (y, row) in grid.iter().enumerate() {
|
||||
for (x, cell) in row.iter().enumerate() {
|
||||
if cell != &Cell::PRoll {
|
||||
continue;
|
||||
}
|
||||
|
||||
let neighbours = GRID_OFFSETS.iter().filter_map(|(xoff, yoff)| Some((x.checked_add_signed(*xoff)?, y.checked_add_signed(*yoff)?))).filter_map(|(x, y)| {
|
||||
let cell = grid.get(y)?.get(x)?;
|
||||
Some((x, y, cell.clone()))
|
||||
}).filter(|(_, _, c)| c == &Cell::PRoll).count();
|
||||
|
||||
loop {
|
||||
let mut to_remove = Vec::new();
|
||||
for (y, row) in grid.iter().enumerate() {
|
||||
for (x, cell) in row.iter().enumerate() {
|
||||
if cell != &Cell::PRoll {
|
||||
continue;
|
||||
}
|
||||
|
||||
if neighbours < 4 {
|
||||
result += 1;
|
||||
let neighbours = GRID_OFFSETS.iter().filter_map(|(xoff, yoff)| Some((x.checked_add_signed(*xoff)?, y.checked_add_signed(*yoff)?))).filter_map(|(x, y)| {
|
||||
let cell = grid.get(y)?.get(x)?;
|
||||
Some((x, y, cell.clone()))
|
||||
}).filter(|(_, _, c)| c == &Cell::PRoll).count();
|
||||
|
||||
|
||||
if neighbours < 4 {
|
||||
result += 1;
|
||||
to_remove.push((x, y));
|
||||
}
|
||||
}
|
||||
}
|
||||
if to_remove.is_empty() {
|
||||
break;
|
||||
}
|
||||
|
||||
for (x, y) in to_remove {
|
||||
grid[y][x] = Cell::Empty;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
println!("Result: {}", result);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user