mirror of
https://github.com/bertptrs/adventofcode.git
synced 2025-12-25 21:00:31 +01:00
Implemention day 11
This commit is contained in:
93
2020/inputs/11.txt
Normal file
93
2020/inputs/11.txt
Normal file
@@ -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
|
||||||
10
2020/samples/11.txt
Normal file
10
2020/samples/11.txt
Normal file
@@ -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
|
||||||
@@ -1,12 +1,165 @@
|
|||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
|
use std::mem::swap;
|
||||||
|
|
||||||
|
use crate::common::read_char_grid;
|
||||||
use crate::Solution;
|
use crate::Solution;
|
||||||
|
|
||||||
|
fn neighbours(grid: &[Vec<u8>], 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<u8>], 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<u8>]) {
|
||||||
|
for line in grid {
|
||||||
|
let s: String = line.iter().map(|&c| c as char).collect();
|
||||||
|
println!("{}", s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct Day11;
|
pub struct Day11;
|
||||||
|
|
||||||
impl Solution for Day11 {
|
impl Solution for Day11 {
|
||||||
fn part1(&mut self, _input: &mut dyn Read) -> String {
|
fn part1(&mut self, input: &mut dyn Read) -> String {
|
||||||
todo!()
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user