From 7649d628e77591bc4ef97ebad8785c9367f94724 Mon Sep 17 00:00:00 2001 From: Bert Peters Date: Fri, 11 Dec 2020 08:20:27 +0100 Subject: [PATCH] Implemention day 11 --- 2020/inputs/11.txt | 93 ++++++++++++++++++++++++++ 2020/samples/11.txt | 10 +++ 2020/src/day11.rs | 157 +++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 258 insertions(+), 2 deletions(-) create mode 100644 2020/inputs/11.txt create mode 100644 2020/samples/11.txt diff --git a/2020/inputs/11.txt b/2020/inputs/11.txt new file mode 100644 index 0000000..5858f25 --- /dev/null +++ b/2020/inputs/11.txt @@ -0,0 +1,93 @@ +LLLLLLLLLLLLLLL.L..LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLL.LLLLLL.LLLLLLLLL.LLLL...LLLLLLLLLLL +LLLLLL.LLL.LLLLLLL.LLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL.LL.LLLLLL..LLLLLLL.LLLLL.LLLL.LLLLLLLLLLLLL +LLLLL.LL.LLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLL +LLLLLLLL.LLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLL.L.LLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL.LLLL.LLLLLLLLLLLLL +.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL +LLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLL..LLLLLLL.L.LLLLLLLLLLLLLLLLLLL.LL.LLLLLLLLLL.LLLLLLLLLLLLL +.LL.LLLL..LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LL.LLLLLLLLLLLLLLL +LLLLLLLL.LLLLLLLLL.L.LLLL.LLLLLLLLL...LLL.LL.L.LLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLL.LL.L +LLL.LLLL.LLLLLLLLL.LLLLLL.LLLL.LLLL.LLLLLLLL..LLLL.LLLLLLLLL.LLLLLLLLLLLL.L.LLLL.LLLLLLLLLLLLL +.LLLLLLL.LLLLLLL.L.LLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLL.L..LLLLLLL.LLLLLLLLLLLLL +..L......L.L..L.LL.LL....L......L.L.L..LL....L............L..L.LLL..L..LL.LL...............L.. +LLLL.LLL.LLLLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLL.LLLLL.L.LLLL.LL.LLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL +LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL.L..LLLLLL..LLLLLLLL.LLLLLLLLLLL.LLL.LLLLL.LLL.LLLL.LLLLLLLLL +LLLLLLLLLLLLLLL.LL.LLLLLL.LLLL.LLLL.LLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL.LLLLL.LL.L..LLLLLLLLLLLL +LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LL.LLLLL.LLLLLLLLLLLLLLL.LLLLLLLL.LLLLL.LLLL.LLLLLLLLLLLLL +LLLLLLLL.LLLLLLL.L.LLLL.LLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLL..LLLLL.LLL.LLLLLLLLLLLL.L +LLLLLLLL.LLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLL.LL.LLLLLL.LL.LLL.LLLL.LLLLLLLLLL.LLLLLLLLLL.LL +LL.LLLLLLLLLLLLLL..LLLLLL.LLLLLLLLLLLLLLLLLL.LLL.L.LLLLLLLLLLLLLLLL.LL.LLLL.LLLL.LLLL.LLLLLLLL +..L......L....L...L..LLL..L.LL.....LLL.LL.L..LLLLLL...L.LL.LL...L....L..LLL.LLL..L...L........ +LLLLLLLLLLLLLLLL.L.LLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLL.LL.LLLLL.LLLLLLLLLL.LL.LL.LLLLLLL +LLLLLLLL.LLL.LLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL.LLLLL.LLL.LLLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLL +L.LLLLLLLLLLLLLLLL.L.LLLL.LLLLLLL.L.LLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLL +LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLL.LLLLLLL.L.LLLLLL.LL.LL.LLLL.LLLLLLLLLLLLL +LL...........L..L.....L..L.....L......L..L.LL.L....LL..L.L...L..LLLL....LL.LL.......LLL......L +LLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLL.LL.LLLLLLLLLLL..LLL.LLLLLLLLLLLLL +LLLLLLLLLLLLLLLLLLLL.LLLL.LLLL.LLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLL +LLLL.LLL.LLL.LLLLLLLLLL.L..LL.LLLLLLLLLLLLLL.LLL.L.L.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL +LLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLL.LLLLLLLL.L.LLLL.LLLLLLLLLL.LL +LLLLLLL.LLLLLLLLLL.LLLLLL.LLLLLLLL..LLLLLLL..LLLLLL.LLLLLLLLLLLLLLL.L.LLLLLLLLLL..LLLLLLLLLLLL +.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLL.L.LLL.LLLLLLLLLLLLLLLLLL +LLLLLLLL.L.LLLLLL.LLLLLLLLLLLL.LLLL..LLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLL.LLLL.LLLLL.LLLLLLLLLLLL +L.L..LLLL..L...L.L..L..L.LL.L..L....LL.L...L..L.L.LL......LLL.L.L..L.......L...LL...LLLL....L. +LL.LLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLL.LL.L..LLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLL +.LLLLLLLLLLLLLLLLL..LLLLLLLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLL..LLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLL +LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LL.LLLLL.LLLLLLLL.LL..LLLLLLLLL.L.LLLLLLLLLLLLLLLLLL +LLLLLLLL..LLLLLLLL.LLL.LL.LLLLLLLLL.LLLLLLLL.LL.LL.LLLLLLLLL.LLLLLLLL.LLLLL.LLLL.LLLLLLLLLLLLL +LLLLLLLLLLLLLLLLL..LLLLLL..LLLLLLLL.LLLLLLLL..LLLL..LLLLLLLL.L.LLLLLL.L.LLLLLLLL.LLLLLLLLLLLLL +L.LL...LL..L......L..L..L..L.LL...LL...L....LL..L..........L..L.L.LL.L......L.........L.L.L... +LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLL.LLL.LLLLLLLLLLLLL +LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLL.LLLLLLLL.LLLL +LLLLLLLLLLLLLLLLL.LLL.LLLLLLLLLLLL..LL.LLL.LLLLLLLLLLLLLLLLL.LLL.L.LL.LLLLLLLLLL.LLLLLLLLLLLLL +LLLLLLL..LLLLLLLLL.LLL.LL.LLLLLLLLL.LLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LL.L.LLLL.LLLLLLLL +LLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLL..LLLLL.LLLLLLLLL.LLLLLLLL.L.LLL.LLLL.LLLLLLLLLLLLL +LLLLLLLL.LLLLLLLLLLLLLL...LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL..LLL.LLLLLLLLLL.LLL.LLLLLLLLLLLLLL +LLLLL.LL.LLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL +LLLLLLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLLLLL.LL.LLLLL.LLLL.LLLLLLL.LLLLLLLLLLL.LLLL.LLLLL.LLLLLLL +LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLLLLLLLL.L.LLLL.LLL..LL.LLLLLLLLLL..LLLLLLLLLLLLLLLLLL +.L.L..LL....L.LLLL.....LL.L...L.L..LL..LL........LL..L.L..L....L.LLL....L..L.L..L.LL..L.....L. +LLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLLLLLL.LL.LLLLLLLLLL.LLLLLLLL.LLLL..LLLL.LLLLL.LLLL.LL +LLLLLLLL.LLLLL.L.L.LLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LL.L.LLLLLLLL.LLLL +LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLLLLLLL.LLL.LLLLL.LLLL.LLLLLLLLLLL.L +LLLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLL.LLLLL.LLL..LLLLLLLLLLLLL +LLLLLLLL.LLLLLLLLL.LLL.L.LLLLLLLLLLLLLLLLLLL.LLLLLLLLLL.LLLL.LLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLLL +LLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL.L.LLLLLLLLLLLLL.LLLLLLLL.LL.LL.LLLLLLLLLLLL +LLLLL.LL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLL +LL.LL..L.LL.....LL..L.LLLL..........L.....L.L..LL..LLLL....L.........L.L...L...L....L...LL...L +LLLLLLLL.LLLLLLLL..LLLLL..LLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLL..LLL..LLLLLLLLLLLL +LLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL.L.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL.LL.L.L.LLLLLLLLLLL +LLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLL..LLLLLLLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLL +L.LLLLLL.LLLL.LLLL.LLLLLL.LLLLLLLLL.LL.LLLLL.LLLLL.LLLLLLLLL.LLL.LLL.LLLL.LLLLLL.LLLLLLLLLLLLL +....L........L.....L.L.............L.L..L..LLLL.......L......LL.........L....L...L.LL..LL.LL.L +LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLL..LLLLLLL.LLLLL.LLLL.LLLLLLLLLL.LL +LLLLLLLL.LLLLLLL.L.LLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLL.L.LLLLLLLLLLLL.LLLL.LLLLLLLLLL.LL +LLLLLLLLLLLLLLLL.L.LLLLLL..LLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLL..LLLLLLLL.LLLLL.LLL.LLLLLLLLLLLLLL +LLLL.LLL.L.LLLLLLL.LLLLL.LLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL.LLLLL.LLLL.LLLLLLLLLLLLL +LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL.LLLLL.LLLLL.LLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL +.L..LL.LL...LLL..L..L..L.L..LL......LLLL......L...LLL...L..L...LL....LL....LL.LLLLL...L.L.L..L +LLLLLLLL.LLL.LLLLL.LLL.LL.L.LLLLLLL.LLLLLLL.LL.LLLLLLLLLLLLL.LLLLLLLLLL.LLL.LLLL.LLLLLLLLLLLL. +LL.LLL.L...LLLLL.L.LLLL.L.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.L.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL +LLLLLLLL.LLLL.LL.L.LLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL.LLLLL.LLLLL.LL.LLLLLL.LLLLLL.LLLLLLLLLL.LLL +LL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLL.LLLL.LLLLL..LLLLLL +LLLLLLLL..LLLLLLL..LLLL.L.LLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.L.LLL..LLL.LLLLLLLLLLLL. +LLLLLLL..LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLL.LLLLLLLL +LLLLLLL..LLLLL.LLL.LLLLLL.LLLLLLLLL..LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLL.LLLLLLLL.LLLLL +LLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL..LLL.LLLLLLLLLLLLL +LLLLLLLLLLLLLLLLLL.LL.LLLLLLL.LLLLL.L.LLLLLLLLLLL..LLLLL.LLL.LLLLLLLL.LLLLLLLLLL.LLLLLLLLLL.LL +.....LLL..L..L...LL..L.LL.LLLL....L.L.LL.L.L......LLLL..L..LL.L......L.LL.....L...L...L..LLL.. +.LLLLLLL.LLLLLLLLLLLLLL.L.LLLLLLLLL.LLLLLLLLL.LLLL.LLLLLLLLL.LLLLL.LL.LLLLL.LLLL.LLLLLLLLLLLLL +LLLL.LLL.LL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.L.LLL.L.LLLLLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLL +LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL +LLLLLLLL.LLLLLLLL..LLLLLL.LLLLLLLLL.LLLLLLLLLLL.LL.LLLLLLLLLLLLLLLLLLLL.LLL.LLLLL.LLLLLLLLLLLL +LLLLLLLL.LLLLL.LLL.LLLLLLLLLLLLLL.L.LLLLLLLL.L.LLLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLL +LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LL.LL.LL.LLLLLLLLLLLL.LL +LLLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLL.LLLLL.L.LL.LLLLLLLLLLLLL +L.L.L.......L.LLL.L.L..L.LLL.L..L...LLLL.L.L.....L...L..L........L...LL...L..L...LLLL..L..L... +LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLL..LLLLLLLLLLLLL.LLLLL..LLL +LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLL.LLL..LLL.LLLLLLL.LLLLL +LLLLL.LL.LLLL.LL.L.LLL.LL.LLLL.LLLL.LLLLLLLL.LLLLL.LLLLLL.LL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL +LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLL.LLLLLL.L.LLLLLLLLLL.LLLLLLLLLLLLL +LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL.LLL.L.LLLL.LLLLLLLLLLLLL +.LLLLL.L.LLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLL.L.LLLLLLLL.LLLLLLL.L.LLL.LLLLLLLLLLL.LLLLLL +LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLLLL.LLLL.LLLL.LLLLLLLL +LLLLLLLL..LLLLLLLL.LLLLL..LL.LLLLLL.LLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLL..LLL.LLLLLLLLLLLLL diff --git a/2020/samples/11.txt b/2020/samples/11.txt new file mode 100644 index 0000000..1beaede --- /dev/null +++ b/2020/samples/11.txt @@ -0,0 +1,10 @@ +L.LL.LL.LL +LLLLLLL.LL +L.L.L..L.. +LLLL.LL.LL +L.LL.LL.LL +L.LLLLL.LL +..L.L..... +LLLLLLLLLL +L.LLLLLL.L +L.LLLLL.LL diff --git a/2020/src/day11.rs b/2020/src/day11.rs index c4c350d..317f687 100644 --- a/2020/src/day11.rs +++ b/2020/src/day11.rs @@ -1,12 +1,165 @@ use std::io::Read; +use std::mem::swap; +use crate::common::read_char_grid; use crate::Solution; +fn neighbours(grid: &[Vec], r: usize, c: usize) -> usize { + let mut n = 0; + + if r > 0 { + let range = c.saturating_sub(1)..grid[r - 1].len().min(c + 2); + n += grid[r - 1][range].iter().filter(|&&s| s == b'#').count(); + } + + if r < grid.len() - 1 { + let range = c.saturating_sub(1)..grid[r + 1].len().min(c + 2); + n += grid[r + 1][range].iter().filter(|&&s| s == b'#').count(); + } + + if c > 0 && grid[r][c - 1] == b'#' { + n += 1; + } + + if c < grid[r].len() - 1 && grid[r][c + 1] == b'#' { + n += 1; + } + + n +} + +fn neighbours2(grid: &[Vec], r: usize, c: usize) -> usize { + let mut n = 0; + + let directions = [ + (-1, -1), + (-1, 0), + (-1, 1), + (0, -1), + (0, 1), + (1, -1), + (1, 0), + (1, 1), + ]; + + let r = r as isize; + let c = c as isize; + + for &(dr, dc) in &directions { + let mut nr = r + dr; + let mut nc = c + dc; + + // Don't write conditions like this kids + while nr >= 0 + && nr < (grid.len() as isize) + && nc >= 0 + && nc < (grid[nr as usize].len() as isize) + { + match grid[nr as usize][nc as usize] { + b'#' => { + n += 1; + break; + } + b'L' => break, + _ => { + nr += dr; + nc += dc; + } + } + } + } + + n +} + +#[allow(unused)] +fn print(grid: &[Vec]) { + for line in grid { + let s: String = line.iter().map(|&c| c as char).collect(); + println!("{}", s); + } +} + #[derive(Default)] pub struct Day11; impl Solution for Day11 { - fn part1(&mut self, _input: &mut dyn Read) -> String { - todo!() + fn part1(&mut self, input: &mut dyn Read) -> String { + let mut state = read_char_grid(input); + let mut next = state.clone(); + + loop { + for (r, row) in state.iter().enumerate() { + for (c, s) in row.iter().enumerate() { + let e = match *s { + b'#' if neighbours(&state, r, c) >= 4 => b'L', + b'L' if neighbours(&state, r, c) == 0 => b'#', + s => s, + }; + + next[r][c] = e; + } + } + + if state == next { + return state + .iter() + .flatten() + .filter(|&&s| s == b'#') + .count() + .to_string(); + } + + swap(&mut state, &mut next); + } + } + + fn part2(&mut self, input: &mut dyn Read) -> String { + let mut state = read_char_grid(input); + let mut next = state.clone(); + + loop { + for (r, row) in state.iter().enumerate() { + for (c, s) in row.iter().enumerate() { + let e = match *s { + b'#' if neighbours2(&state, r, c) >= 5 => b'L', + b'L' if neighbours2(&state, r, c) == 0 => b'#', + s => s, + }; + + next[r][c] = e; + } + } + + if state == next { + return state + .iter() + .flatten() + .filter(|&&s| s == b'#') + .count() + .to_string(); + } + + swap(&mut state, &mut next); + } + } +} + +#[cfg(test)] +mod tests { + use crate::test_implementation; + + use super::*; + + const SAMPLE: &[u8] = include_bytes!("../samples/11.txt"); + + #[test] + fn sample_part1() { + test_implementation!(Day11, 1, SAMPLE, 37); + } + + #[test] + fn sample_part2() { + test_implementation!(Day11, 2, SAMPLE, 26); } }