From 2f097ef852b381d92809df0c0d981b4f897fb291 Mon Sep 17 00:00:00 2001 From: Johannes Date: Fri, 28 Jun 2024 10:50:35 +0200 Subject: [PATCH] Day 18 part 2 --- src/day18.rs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/day18.rs b/src/day18.rs index 1daa062..bacfda1 100644 --- a/src/day18.rs +++ b/src/day18.rs @@ -37,6 +37,35 @@ fn part1(input: &Field) -> usize { current.into_iter().flatten().filter(|x| *x).count() } +#[aoc(day18, part2)] +fn part2(input: &Field) -> usize { + let mut current = input.clone(); + let mut next = input.clone(); + let l = current.len() - 2; + for _ in 0..100 { + for x in 1..current.len() - 1 { + for y in 1..current.len() - 1 { + if x == 1 && y == 1 || x == 1 && y == l || x == l && y == 1 || x == l && y == l { + next[x][y] = true; + continue; + } + + let now = current[x][y]; + let neighbors_on: usize = count_neighbors(¤t, x, y); + let new = if now { + neighbors_on == 2 || neighbors_on == 3 + } else { + neighbors_on == 3 + }; + next[x][y] = new; + } + } + (current, next) = (next, current); + } + current.into_iter().flatten().filter(|x| *x).count() +} + + fn count_neighbors(field: &Field, x: usize, y: usize) -> usize { let mut result = 0; if field[x - 1][y - 1] {