This commit is contained in:
James Hogge
2025-12-10 00:22:20 +00:00
parent b1dc693fbf
commit b3ae04b51d
10 changed files with 363 additions and 46 deletions
+33 -18
View File
@@ -1,14 +1,22 @@
use std::{fs::File, io::{self, BufRead, BufReader}};
use std::{
fs::File,
io::{self, BufRead, BufReader},
};
const NEIGHBOURS: [(i32, i32); 8] = [
(-1, -1), (0, -1), (1, -1),
(-1, 0), (1, 0),
(-1, 1), (0, 1), (1, 1),
(-1, -1),
(0, -1),
(1, -1),
(-1, 0),
(1, 0),
(-1, 1),
(0, 1),
(1, 1),
];
fn get_grid_cell(grid: &[Vec<bool>], x: i32, y: i32) -> bool {
let (Ok(ux), Ok(uy)) = (usize::try_from(x), usize::try_from(y)) else {
return false
return false;
};
grid.get(uy)
.and_then(|row| row.get(ux))
@@ -18,22 +26,26 @@ fn get_grid_cell(grid: &[Vec<bool>], x: i32, y: i32) -> bool {
fn count_surrounding(grid: &[Vec<bool>], x: i32, y: i32) -> i32 {
NEIGHBOURS
.iter()
.map(|(dx, dy)| get_grid_cell(grid, x + dx, y + dy))
.filter(|&p| p)
.count() as i32
.iter()
.map(|(dx, dy)| get_grid_cell(grid, x + dx, y + dy))
.filter(|&p| p)
.count() as i32
}
fn update_grid(grid: &[Vec<bool>]) -> Vec<Vec<bool>> {
let height = grid.len();
let width = grid[0].len();
(0..height).map(|y| {
(0..width).map(|x| {
let x = x as i32;
let y = y as i32;
get_grid_cell(grid, x, y) && (count_surrounding(grid, x, y) >= 4)
}).collect::<Vec<_>>()
}).collect::<Vec<_>>()
(0..height)
.map(|y| {
(0..width)
.map(|x| {
let x = x as i32;
let y = y as i32;
get_grid_cell(grid, x, y) && (count_surrounding(grid, x, y) >= 4)
})
.collect::<Vec<_>>()
})
.collect::<Vec<_>>()
}
fn count_all_true(grid: &[Vec<bool>]) -> usize {
@@ -59,6 +71,9 @@ fn main() -> Result<(), io::Error> {
last_grid = next_grid;
}
println!("Result: {}", count_all_true(&original_grid) - count_all_true(&last_grid));
println!(
"Result: {}",
count_all_true(&original_grid) - count_all_true(&last_grid)
);
Ok(())
}
}