feat: solve day 20 part 1 & 2
This commit is contained in:
parent
e413a13b3c
commit
4db9c115f6
102
input/20.txt
Normal file
102
input/20.txt
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
#..###.##....#.#.#...#.#.#...##...####......##.##..###...#.####..#..#..#####..#.##.....#..#.###.##...#.#.....#...##.##.##...#####.#.#.#.##.###.#.##..#.##.##.#..#...####.#.#.....#..#.....###.#..#.#.#.#...#.###..#.###..##.#..#...##...####.#.........###..#.##.#..#.#...##.#.#.##.####.###....#####..###...##..#####..###..##..#.#.#..###.##.###..#.#######.####..#....###.##...#.####..#.#######...###...##.##.###...##..#.....#.###....#..#.#..###.#...#######.#...##..#.#..##.#...##.#..##.##..#...#.#.##.####........#..#.
|
||||||
|
|
||||||
|
#.###...#..#...###..#..#.#....#####.#...#..#####...#.##...#....#.#.#..#.#.........#..##..#..#.#..#..
|
||||||
|
###.#..##.#.##.#......#.###.##..###.#..#.###..####.#...#.....#...#.#.#..#######..#.#.##.#.#####..###
|
||||||
|
.....##...#..#.#..#....###.##..######.#..#.###.###.###.#.#.##.####.#..#.#....##..#.##.#.........#.#.
|
||||||
|
.#####...##...###..####.##.##.#..###.#.#..##..###...##.#..#...###.###.#.##.#.#....##.#.##.#.#..##.#.
|
||||||
|
..#.....#####.#.###.###..#..##.##...#######.#...#...#.##.#.###....#.....####..#.....##.#####.###..##
|
||||||
|
.###.#####.#..#...#.#....####.#..###.##...##..#..##..#........###..#..###....###.#.#..##..#...#.#..#
|
||||||
|
##.##.#.##.#...###.###.###....#...##.#.#..#.##...#..#.#.#..####.#.###....#.##.#.##.#..#.#.....###.#.
|
||||||
|
..#..#.###..##..#####.##.#.#..#..##...##..#..##..##....###..#.###..##..#.#..#..#..#.##.#..##.##.....
|
||||||
|
###.#.#.#...#.#...#.###..#.###....##..#.##.###.....###.#..#..#####.##.#.##..#..##..###.###..###....#
|
||||||
|
###......##.##..#.......####...##.#......#.#.....#..#.#.###........##.#.####.#.#.##...#..###.#.#....
|
||||||
|
.##.##...#.#..#...#####.#####..#.......##..##.#.....####.###.#..#...##.#.###.#..##.##..####..#..##.#
|
||||||
|
.#...#.#.#.#....###......##.....#...##...###...##....#..##.#..##.#.##.#...##.#.#.......##.#....#.#.#
|
||||||
|
#..#....####...#.#.#.####...###.###.######..#.#...##.#...#.##......#.#...#.#.###.#.#.#..####..#.#...
|
||||||
|
..#..##....##.##...###..###.#...#.#...#.##..#..#.#.####..#...#..#.#.##....#....#.##..#.#..#.#....#.#
|
||||||
|
.#.#.########.##.#....##.#..###....#.#.###.#...##....###......##########.#..#.#.####...#..##...#..##
|
||||||
|
#..##..#..#.#.#####..#####...#.###..####..##.#.#.####.#..#.#..####......#..#..##....##...#..###.#.##
|
||||||
|
..###.#.#.##.##.#.#...###.#..#....####..###.##..##.#..##....###.#####.#..#...###.#.#..##...#...#####
|
||||||
|
#.##.##.#..##.###.#.#.##..#...#...###..#..##.#..##....#####...#.#.#.##...####.##....#.#.##.#.##.#...
|
||||||
|
##...##.#.###.####.##......##...#..#..#.....##..##..#.###.#..##.#.##.##..#..####.#########...##..#..
|
||||||
|
.###..#.#..##..##..#..#...#.#..###.....#.#####..##.####...#.#...######.........####...........#..#.#
|
||||||
|
#..#...##.#.##...##..##..........#..#...#..#..#.#..#.........######..####.#.##...##.##.##.....##..##
|
||||||
|
#..##.#.###..##..####.#..######....#....####...##.#.#.#.#..#.##..#..#..###..#.#.#.#.#....#..##.#.#..
|
||||||
|
.....##.......#.#.##.......##.##.#..###...###....##.###....##.#.####.###.##..##.#..##...###........#
|
||||||
|
##..##....#.###..###.##.....##.#...##....##..#....#....###...#..#...###..#.####....#.......##.....##
|
||||||
|
#..#..#.#..#...##.#.##.##...#.#.##..##..#.##..#.#...#...#.###.####..#....#####...#.###.##.####..#.##
|
||||||
|
..##..##....####..#...###.############.##.#.##.####.#..#.##.#..##....#####..#.#####...###.#..#.##...
|
||||||
|
...#.##.#.###.....###.#.#...##.#.#.##.##.#..##.#.##.#.##.#..#.###...#####.#..#.#..##...#.####..##..#
|
||||||
|
#.#.###.####..#.#.###...##...###..#......#..##.....###.....#.##...##.#..#.#.####.#..#.#.#.##.####.##
|
||||||
|
.###...####..##..#..###.#.#.#.##..##.##.#..#..##.##.#..#....#.#.###...#...#....##..##.#.##.######.##
|
||||||
|
###.##....##.#.####..#########.....#.###...######.#.#....#...##...####.##.#.#.#####.....##....#.#.##
|
||||||
|
######.#..#......#......###.##.#.###.#####..#.###.......####.#.###.#.#.##.##.....####...#..#.#.#####
|
||||||
|
....##.#.#.#.##..##.###..#.###.##.##..###..#..#####.#####........#..##.#..##........#.##..#..#..#...
|
||||||
|
.###..###.##.###.#.##.####.##.#.#...####.#..#.######.#.#####.#......#####.##..##.#.#.#.##.#..###.#.#
|
||||||
|
#.##....###...#.....#..##.##.##.#..#.#..#.#.#...##..####.#..#.......####.###.#.####..#.#..##..##.#..
|
||||||
|
##.#########..#....#....##...##.###..##.......####...####.#..#...###..##..##.#.#####..##.#....#..###
|
||||||
|
..#..#####..####.####...#..#.#...####...#..###..#...#...########..#.#.#..###....####.....###.##...#.
|
||||||
|
##.###.##..###.#.#..#..#.####...#.#...###..##...#.###.....##.#.#.#.##.#.#...###..###.###..#.#..#.#.#
|
||||||
|
#.##..#.##..##.##...#.##.....##.#..#..###.##..##.#.##..#####..#####.###.##..###...#.#.#.##.##...###.
|
||||||
|
..#.##.###.##.###.##.##.##......###..#.##.#..#...##.##.###..#..###.#......#.#..##..#.#..#####.......
|
||||||
|
..##.#.###.###.###.##..####.#..####.#.##.#..#.######.#..##.#.#.#...#######.##..###..####.##..#..###.
|
||||||
|
.####.##...#.#..#...##..#.#....#.#.##.##.#.#.#..##.#.#......####....###.####..#######.##.#....#.#.#.
|
||||||
|
###.#.##.......#...###...##.#.##.##...#..#.#..###.####.#.###.#.#.##.#.#.###....#....#.#....#..#.#..#
|
||||||
|
.#......#...#.#...#.##.#.###...#...##...#.###.#..#..#...#.#.#.###.##...###..##..###..#.#.##.#...####
|
||||||
|
##.##...##..##...##..#...###...###..##.##.#......#..###.....##..#.#.#####...#######.#.####.#........
|
||||||
|
#..#.....##..##.#.##..#.####......###..#...#.###.######..#.###..#.##..#.#....###..#..########..#.#..
|
||||||
|
##.#..#......###.#.##....#.#...##...##.#..##......###..####.###.###.#.....#...##....#####.###..##..#
|
||||||
|
###.......#.#.##....##..#.#..####.#.#..#.#..#...###.#.#.###.#####...####.#..#.##..#.....#.#.....#...
|
||||||
|
.##.#..###....#.#####..###...##.#...####.###...#.######.#..###...#...#######.#.##.#....##.#.##...###
|
||||||
|
#....#..#.#.#####..###.##..#.####..##.#.#....#.#.##.....##...#..#.###.#...#....#..#....###.#..#.###.
|
||||||
|
#..#.#######.##..#.#..#.##..#######..####....#.#.###..###......###.####.#.....##..#.##.#.....###..##
|
||||||
|
.###.#..##.......###..#.##....#......#.##..#.##..##.####.....###.#...#.#..##....#.#.###.###.#.#.##.#
|
||||||
|
...#####.#.###....#..#.....###.#.....#..#..#..###...###.###..#....#####.#.###..#.....#..######....#.
|
||||||
|
#..####...#...##..##.####..###.....##.###..#.###.#.#.##..#..#####...##.#...##.#..##.##.##.#....#....
|
||||||
|
#...#.####......#.##..##.#.##.#.#####..#######.##.##.#.#.......#.#.#...##.####.###..#..#....#####.##
|
||||||
|
..##...###...##.#..##..#...##.#.......#..#...#.#....#.###..##.#.###..##.#..####.######..#..#.##.#..#
|
||||||
|
.##.....#.##..#..##......###.###.#......####..####.#.#.#...#..#..#..###..#..#...#.####.#.##..###.###
|
||||||
|
........###.####...#...##..##..#.###..##..##.#...#..##.##....###.##.#.#..###.#.####....##..#.####.##
|
||||||
|
.#..#...###.##.#....#.#.##...#..##..#.##...#...#.######.##.##.#####....##.###..####.....#.#..#...#.#
|
||||||
|
#.#....##....#.######.##..#...##.##.#..#..#.#...#.##..##....###.#.#.#.#.#.######...##..###.#.##...#.
|
||||||
|
..#....####.#.#############.####...#####......####.##.##.##..#..##.#....####..####.#..####.#.#..#.##
|
||||||
|
#.##.#..#..####...#######....#...####.#..####....#####..##..#######..#.#....##.......#.#..#..####.#.
|
||||||
|
#.#..#.#.#...####..#.....####.#...###...###.#.##.##.#.##.#........#.##..##.###.##.......#.###.....##
|
||||||
|
..#.#.###.#.###.#.....###.#...##...#..#.....###.#..#..#..#...##..#..#.##..#..#.#.##..##.....#...##..
|
||||||
|
..##.###.##.##..##.##.####..##..#.#.##.##.#...##...##....###..##...#..###.##.##.....###.#.##.##.#.##
|
||||||
|
#.####...##.###..####...#.##.#####.#....#.#..#.....#......##..##.######...#....####...#..#.#..#..#.#
|
||||||
|
.###..#.#.##.#.....###.#..#..#..#...####.#.####.#...###.##....###..##.##..#.##.#...#.#.#...####..##.
|
||||||
|
##..##..####.####.#.##.#.#..####..##.######.###...##.##..#.#####.###..##...#.....##.##..#..###..####
|
||||||
|
#..##.####.#.#.#####.....##.####..##..###...##...##...##....#.#.#...######...#...........##..###.##.
|
||||||
|
...###.##...#.#.##...####...#..#.######.####.##.##.#....#.#.###..#.##...###.#...##.....##...###..##.
|
||||||
|
.....#.###.##.....##.###.#.#..###..##..#..#.#.###..####......#.#####..##.####..###..##.#######.##.##
|
||||||
|
#...#..#...##..#...####.##...#.#..##.......#.#...#.##.####.....#########...##....####.......#.###.##
|
||||||
|
.#.....#.....####...#####..###.#.........##..##.##.#...#.#..#.#.#.#.#.###.#####..####..#......##.#.#
|
||||||
|
#..#..###.#..#######.#..###.##..#..##.#..#..#.##.###.#..###.###..........#.###.#####.#.##.#.#...##..
|
||||||
|
.##..###.#.#####.##.####.#.#..#..###....##.#.#..###.#.##..#.#..###..##.#.##.....#.#.#.#.#.####.#.##.
|
||||||
|
..##.###...#....##.##.#####.##....#..##.######....###..#.#.##.###.#.......######.#..#..#..###.##....
|
||||||
|
#.#..#.##.###...#..#####.##.#.###.#.###.......#######....#.####...####.##..#.#.###.##..#..#..###..#.
|
||||||
|
#......#.##.##....##.#..#.#....##..#.###.....#.##...#.#..#...##.####......##..#.#.#...#...#.....#.##
|
||||||
|
#....##.#.##.#.......#.##.#.###..#...###.#.###.##......#..#####..##.#..#....######.##.#..#...##..##.
|
||||||
|
######.#.....#.#..##.##.....##.#..####.###..#.#.###....#..###..#..##.#..#.###..#.##...####....#.#...
|
||||||
|
#.#..###..#####..#....#.#...##....###..##....#.##.#......#.#.###.....#.#.#..#.#..###.#....####......
|
||||||
|
#..#.###.###.#.#.#..#.##..#.#.###.#...........#.#...#.##..#....##..#.#.##..##.#...##..#.##.##.#..#.#
|
||||||
|
#.....#..#.#..##.##.######.#######....###.###...#####..#.....#..##.#.##.#.###...#..##.....###...#...
|
||||||
|
#####.#.#..#.#.##..#.####.#...###.##.#....##.##.####.#...####.##.#...####..#..#.####.###....###.....
|
||||||
|
#...#.......##.#...#..####...#.#..#.##.###..#.#.#.##...#.###......##....########..##.####.##.####.##
|
||||||
|
#..#...##.###....##.##.#.##.##..#.#.#...###..#.#........###########.##..###.###.#..#....#.###....##.
|
||||||
|
.#.#..##..##.##.#....##....###.##..###..#.###.#.###.#.###..######..###...####.....#.#...#.#.#..##.#.
|
||||||
|
##...#..######.#.#...#.##....#...#..#..#.##.######.#..#..#.#...##..#..#...###..###.#.#......#....#.#
|
||||||
|
.#.......#...#..#####.#####.#########..#......#..#.#.##.#.#.##.#.#.........####.##.#.###...#.##..#..
|
||||||
|
..###.#.....###..#..#.#..#.#..####..###.....#.####.##...#.#..#.#.#.#.#.#..###..#......#..#####.#.#..
|
||||||
|
#...#....###..####...#.##.#......###.#.##.###.#..###..##....##....#..#.....#...###.##.#......#..####
|
||||||
|
#.####....######.####.#.####..#.#..#..#...####..#.#####..#..##.##..#.##...###...###.#.#..###.#.##.#.
|
||||||
|
.####.###.#.##...###........#...##.#.#.######..#...##.###.##..#.#.######.#####..###....##...##.##...
|
||||||
|
#.###.#.###..#.#.##..####.##..#...###...####..#..####.#.######.#####..#.##.##.##.##..#.#.##..#.##...
|
||||||
|
.#.......#....##..#.#.##.#.#.##..###..#..##.....####.#...###....##.##......#....#.......#...##.##...
|
||||||
|
.####.###..####.#.##..#.#.#..#...#..#.##.###..######.##.##.#.####.##.##.#..#..##..######.####..#..##
|
||||||
|
#.###.##..#.#......##.#...#..#..#.##.#....##.....#......#..#...#..##....#.#####..####.#.#..#..##.##.
|
||||||
|
#.#....#.#.#....#.#####.......#..#..#..#.##...#.#########..##..##...####.##..##.##.##..#.##...#.#.##
|
||||||
|
.####....#..#.####.###.#.##########.###.#...#..##.##.#.####.##.###.##.#..#..#.##.##....###.#...##.#.
|
||||||
|
...####.#.......#......#.######.#.##...###....####.##...##...##.#..#.##..##......#...####.#..##...##
|
||||||
|
.#####...#....#....##.#.####....###..#.##...#.##..##..###.#.##.##.##...#.###..###.###...###...##.#..
|
235
src/day20.rs
Normal file
235
src/day20.rs
Normal file
@ -0,0 +1,235 @@
|
|||||||
|
use std::{ops::Range, fmt::Display};
|
||||||
|
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
pub struct Image {
|
||||||
|
width: usize,
|
||||||
|
height: usize,
|
||||||
|
data: Vec<bool>,
|
||||||
|
default_value: bool,
|
||||||
|
offset_x: i32,
|
||||||
|
offset_y: i32
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Image {
|
||||||
|
fn new(width: usize, height: usize) -> Image {
|
||||||
|
let data = vec![false; width*height];
|
||||||
|
Image {
|
||||||
|
width,
|
||||||
|
height,
|
||||||
|
data,
|
||||||
|
default_value: false,
|
||||||
|
offset_x: 0,
|
||||||
|
offset_y: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get(&self, x: i32, y: i32) -> bool {
|
||||||
|
if self.in_bounds(x, y) {
|
||||||
|
let index = (y + self.offset_y) * self.width as i32 + (x + self.offset_x);
|
||||||
|
*self.data.get(index as usize).unwrap_or(&self.default_value)
|
||||||
|
} else {
|
||||||
|
self.default_value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn set(&mut self, x: i32, y: i32, value: bool) {
|
||||||
|
// Make image larger if it is too small
|
||||||
|
let (left, top, right, bottom) = self.bounds();
|
||||||
|
if !(left <= x && x < right && top <= y && y < bottom) {
|
||||||
|
if x < left {
|
||||||
|
self.offset_x = -x;
|
||||||
|
self.width = self.width + (-x + left) as usize;
|
||||||
|
} else if x >= right {
|
||||||
|
self.width = self.width + 1 + (x - right) as usize;
|
||||||
|
}
|
||||||
|
|
||||||
|
if y < top {
|
||||||
|
self.offset_y = -y;
|
||||||
|
self.height = self.height + (-y + top) as usize;
|
||||||
|
} else if y >= bottom {
|
||||||
|
self.height = self.height + 1 + (y - bottom) as usize;
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut new_data = Vec::new();
|
||||||
|
for y in self.y_range(0) {
|
||||||
|
for x in self.x_range(0) {
|
||||||
|
new_data.push(self.get(x, y));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
self.data = new_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
let index = ((y + self.offset_y) * self.width as i32 + (x + self.offset_x)) as usize;
|
||||||
|
self.data[index] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn in_bounds(&self, x: i32, y: i32) -> bool {
|
||||||
|
let (left, top, right, bottom) = self.bounds();
|
||||||
|
left <= x && x < right && top <= y && y < bottom
|
||||||
|
}
|
||||||
|
|
||||||
|
fn count(&self, value: bool) -> usize {
|
||||||
|
if self.default_value == value {
|
||||||
|
usize::MAX
|
||||||
|
} else {
|
||||||
|
self.data.iter().filter(|x| **x == value).count()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn x_range(&self, padding: u32) -> Range<i32> {
|
||||||
|
let padding = padding as i32;
|
||||||
|
Range {
|
||||||
|
start: -self.offset_x - padding,
|
||||||
|
end: self.width as i32 - self.offset_x + padding
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn y_range(&self, padding: u32) -> Range<i32> {
|
||||||
|
let padding = padding as i32;
|
||||||
|
Range {
|
||||||
|
start: -self.offset_y - padding,
|
||||||
|
end: self.height as i32 - self.offset_y + padding
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// (i32, i32, i32, i32) => (left, top, right, bottom)
|
||||||
|
fn bounds(&self) -> (i32, i32, i32, i32) {
|
||||||
|
return (
|
||||||
|
-self.offset_x,
|
||||||
|
-self.offset_y,
|
||||||
|
self.width as i32 - self.offset_x,
|
||||||
|
self.height as i32 - self.offset_y
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Display for Image {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
let mut grid = String::new();
|
||||||
|
for y in self.y_range(1) {
|
||||||
|
for x in self.x_range(1) {
|
||||||
|
let symbol = if self.get(x, y) { '#' } else { '.' };
|
||||||
|
grid.push(symbol);
|
||||||
|
}
|
||||||
|
grid.push('\n');
|
||||||
|
}
|
||||||
|
write!(f, "{}", grid)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse_image(input: &str) -> Image {
|
||||||
|
let mut image = Image::new(3, 3);
|
||||||
|
let mut y = 0;
|
||||||
|
for line in input.lines() {
|
||||||
|
let mut x = 0;
|
||||||
|
for c in line.chars() {
|
||||||
|
image.set(x, y, c == '#');
|
||||||
|
x += 1;
|
||||||
|
}
|
||||||
|
y += 1
|
||||||
|
}
|
||||||
|
return image;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse_enchancer(input: &str) -> [bool; 512] {
|
||||||
|
let mut enhancer = [false; 512];
|
||||||
|
let mut i = 0;
|
||||||
|
for c in input.chars() {
|
||||||
|
enhancer[i] = c == '#';
|
||||||
|
i+=1;
|
||||||
|
}
|
||||||
|
return enhancer
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn parse_input(input: &str) -> ([bool; 512], Image) {
|
||||||
|
let (section1, section2) = input.split_once("\n\n").unwrap();
|
||||||
|
return (
|
||||||
|
parse_enchancer(section1),
|
||||||
|
parse_image(section2)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn lookup_enhancer(x: i32, y: i32, image: &Image, enhancer: &[bool; 512]) -> bool {
|
||||||
|
let pixel_offsets = [
|
||||||
|
(-1, -1), ( 0, -1), ( 1, -1),
|
||||||
|
(-1, 0), ( 0, 0), ( 1, 0),
|
||||||
|
(-1, 1), ( 0, 1), ( 1, 1)
|
||||||
|
];
|
||||||
|
|
||||||
|
let mut lookup_index = 0;
|
||||||
|
for i in 0..9 {
|
||||||
|
let (ox, oy) = pixel_offsets[i];
|
||||||
|
let pixel = image.get(x + ox, y + oy);
|
||||||
|
if pixel {
|
||||||
|
lookup_index += 2usize.pow((8-i) as u32)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enhancer[lookup_index]
|
||||||
|
}
|
||||||
|
|
||||||
|
fn enhance(image: &Image, enhancer: &[bool; 512]) -> Image {
|
||||||
|
let mut enhanced = image.clone();
|
||||||
|
for y in image.y_range(1) {
|
||||||
|
for x in image.x_range(1) {
|
||||||
|
enhanced.set(x, y, lookup_enhancer(x, y, image, enhancer));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if image.default_value {
|
||||||
|
enhanced.default_value = enhancer[511];
|
||||||
|
} else {
|
||||||
|
enhanced.default_value = enhancer[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
enhanced
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn part1(data: &([bool; 512], Image)) -> usize {
|
||||||
|
let (enhancer, image) = data;
|
||||||
|
let mut enhanced_image = enhance(&image, enhancer);
|
||||||
|
enhanced_image = enhance(&enhanced_image, enhancer);
|
||||||
|
enhanced_image.count(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn part2(data: &([bool; 512], Image)) -> usize {
|
||||||
|
let (enhancer, image) = data;
|
||||||
|
let mut enhanced_image = enhance(&image, enhancer);
|
||||||
|
for _ in 0..49 {
|
||||||
|
enhanced_image = enhance(&enhanced_image, enhancer);
|
||||||
|
}
|
||||||
|
enhanced_image.count(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part1_example() {
|
||||||
|
let input = parse_input("..#.#..#####.#.#.#.###.##.....###.##.#..###.####..#####..#....#..#..##..###..######.###...####..#..#####..##..#.#####...##.#.#..#.##..#.#......#.###.######.###.####...#.##.##..#..#..#####.....#.#....###..#.##......#.....#..#..#..##..#...##.######.####.####.#.#...#.......#..#.#.#...####.##.#......#..#...##.#.##..#...##.#.##..###.#......#.#.......#.#.#.####.###.##...#.....####.#..#..#.##.#....##..#.####....##...##..#...#......#.#.......#.......##..####..#...#.#.#...##..#.#..###..#####........#..####......#..#
|
||||||
|
|
||||||
|
#..#.
|
||||||
|
#....
|
||||||
|
##..#
|
||||||
|
..#..
|
||||||
|
..###");
|
||||||
|
let result = part1(&input);
|
||||||
|
assert_eq!(result, 35);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn part2_example() {
|
||||||
|
let input = parse_input("..#.#..#####.#.#.#.###.##.....###.##.#..###.####..#####..#....#..#..##..###..######.###...####..#..#####..##..#.#####...##.#.#..#.##..#.#......#.###.######.###.####...#.##.##..#..#..#####.....#.#....###..#.##......#.....#..#..#..##..#...##.######.####.####.#.#...#.......#..#.#.#...####.##.#......#..#...##.#.##..#...##.#.##..###.#......#.#.......#.#.#.####.###.##...#.....####.#..#..#.##.#....##..#.####....##...##..#...#......#.#.......#.......##..####..#...#.#.#...##..#.#..###..#####........#..####......#..#
|
||||||
|
|
||||||
|
#..#.
|
||||||
|
#....
|
||||||
|
##..#
|
||||||
|
..#..
|
||||||
|
..###");
|
||||||
|
let result = part2(&input);
|
||||||
|
assert_eq!(result, 3351);
|
||||||
|
}
|
||||||
|
}
|
@ -72,6 +72,8 @@ fn run(day: i32, part: i32, input_filename: &str) {
|
|||||||
"18.2" => println!("{}", day18::part2(&day18::parse_input(&contents))),
|
"18.2" => println!("{}", day18::part2(&day18::parse_input(&contents))),
|
||||||
"19.1" => println!("{}", day19::part1(&day19::parse_input(&contents))),
|
"19.1" => println!("{}", day19::part1(&day19::parse_input(&contents))),
|
||||||
"19.2" => println!("{}", day19::part2(&day19::parse_input(&contents))),
|
"19.2" => println!("{}", day19::part2(&day19::parse_input(&contents))),
|
||||||
|
"20.1" => println!("{}", day20::part1(&day20::parse_input(&contents))),
|
||||||
|
"20.2" => println!("{}", day20::part2(&day20::parse_input(&contents))),
|
||||||
_ => println!("Day {} part {} not found", day, part)
|
_ => println!("Day {} part {} not found", day, part)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -97,4 +99,3 @@ fn main() {
|
|||||||
}
|
}
|
||||||
run(day, part, &input_filename);
|
run(day, part, &input_filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user