Day 20
This commit is contained in:
parent
8384ef7a95
commit
e37e81188d
@ -78,3 +78,7 @@ path = "src/day18.rs"
|
||||
[[bin]]
|
||||
name = "day19"
|
||||
path = "src/day19.rs"
|
||||
|
||||
[[bin]]
|
||||
name = "day20"
|
||||
path = "src/day20.rs"
|
||||
|
102
inputs/day20.txt
Normal file
102
inputs/day20.txt
Normal file
@ -0,0 +1,102 @@
|
||||
##....#..#####...#######...##.#..####.###.##..###.####.#....##.##.##.#.#####.#.#.#..##.#...#.##.##.#...###.####..###..##.#.#.#....#.#.#..##.....#.##.#.....#..###...##...#####.##.#..#.....#.#.#.#.#.####.###...###..####..#....###..######....####.#..##.##.###.#..#.#.#.###..#.##...#.###.##.#.###.#...#...#....###.##...#.#####.#..#.##..#.##..###.#...###...#######.#.......#...##........######.#########..##.##...##.#...####.....#####....#######..#..###.#####..#.#......#.##..###.####..##...###.########..#.##..#..#..
|
||||
|
||||
.....#.#.##..##.##.#.###...#.#..#..###.#...#.#...####.###.....#..#.##...##.##.#.#.#.###.##.#...##.##
|
||||
##..##...##..#..####.#.###....#.###..#..#.##......####..#.###...#####.#...#.##.###.###.##.##.##...##
|
||||
.#..#.#.......#.#.#..#.#.#...###.###.###.###..#.##..##.###.##..#.#....##.#...#####..#..##..#####.##.
|
||||
####.#######.##.#.....####..##...#.......#.###.##.###.###.#####..#.#######.#.#...#.#.#..####..#.#...
|
||||
##.#.....##.#..#.#####.###.#.#..#.#..#.#.....###.#.##.#..#.###...#####..#..#.##...#.##......###.##..
|
||||
#..####.######...#.#####.########.#.#..#.#..##.##..#.######.#..#...####.#.###.###..##..#.#.....###.#
|
||||
...###..#.####.#..##..###....##....###.##.#...#..#..#..#...##.##.####...###.####.###..#.##.##..#..##
|
||||
.#.#..#...#..###.####...##..#.#...#...##..####.#..#..#....#...##..#..#.##..##.#......#.###.###.#..#.
|
||||
......##..#...#.....#.###....##...#.##...#....#..##..#..##..##..#...###############.#.####.###.##.#.
|
||||
#####.##..#.#.#..#.#..###....#....#......#....##.#.##...##.##.#.#....#.##.##..##...####..##.....##..
|
||||
#.#..#.##....#......##.###...#.##.#.##.#.#..######..#..##..####.#.#####..#.#..###....##..##.#.###.#.
|
||||
.###.#####....#.#.###.####.......#.#.##.....###.##....#.#.#....#.##...###..#..#.##.#..##.#....#.#.##
|
||||
..##...#####..####.####..##.###.#..#..######......##..###....##...#..#..#...#.##..##.####..#####..#.
|
||||
.#..#.###..#.##..#.#.#.####.#..#.#..#..####.####..#.#..##..#.#....#.##.###..#.#####.#..#...###..#...
|
||||
#.######..##.#.#.#..#..##....#.......#####.###.##.#.##..##.###..#.#...##.#.#...###.#..#..#....#.##.#
|
||||
#..##.##..#....#.#.###...#.##.#.#.#.....###.##.###..##.#.....#..##.#...###.##.###########.#.#.#.#...
|
||||
.##.########.###...####.....###....#.##...#..##..##.###......##.##.#.#.#...#...####...#.##...#..#.#.
|
||||
##..#.#.#.####...##......#...##.....#.#.###....#.##.....#.#.##.#.########.#......#...##.##.#.#####.#
|
||||
...#.#....##.###.#..####...##..##...#...###.###.#.###...##..#....##.##..#...#.#.#..##.###.##..#.##..
|
||||
###.#.###..###.##..#....##.#..##.###.#....#......#######..#.#..#...###.#..##.###.##.#####.##..#.#.##
|
||||
.#..##.#####..##.#..###.##.###.#.###.#....#.###.##.#.....#...#..#...###....#.#.####....##...........
|
||||
.#.#..##.#.###.#....#.####.##..##.....#..###.#..#.#.#...#..#....####..#..#.#..###.##.#..####.####..#
|
||||
##...###..##.######.#....#..#.#.###.###...##.##.#..####..#..####..##...##....####..#...##.#.#.###...
|
||||
###.#...#..#.#..#..##.##.##..##.#####...#..##.#...##.#..#...##.####.#.##.##.#.##.#......###.#..#....
|
||||
.....##.#...#.#.#.#...#.#.##.......#.#.######.#..#..##.##......#...#.###.#....###..#..#.##.##.##....
|
||||
####..##.##...#.###..#...#.##.####.#..#.#..#.###..####.##.#..#..#.##...#####.#.###.##.###..#.##...#.
|
||||
.##..#.#####.#.#....##.###..##..###.#.#.#.########.##..####.#.##...#.##.##.##.#.#....#.####.#....#.#
|
||||
#####..#.#.#.####...#.......#.#..##....#.#.###.#..#.##.##.#.#..#....#..#######.#....#......#.####..#
|
||||
.....###...##...####..#...###.##.#.#...#...#.#..#...#.##..#..#..###...####.#...#....#.##....###...#.
|
||||
##.....##..#...##.#.#.###...#.###.###.#.#..#..##..##.#....#..#..#...####.#...#..#...##..###...##...#
|
||||
#.#.##.##..##......##..####...#.##.####....##....####..##.#...###.#.##.#..###..#..###..###..#...#...
|
||||
#.##..###.##.#..#####.#.##.##..###.#.##.....#.....#...#.....##.#..##..#....#.#..##...##.#.####.##...
|
||||
..#.#.#.....##.#...#..#....##..##.##.##.#.#.##.#...####..#..#...###.#..##..##...#####.#...#.#...#.#.
|
||||
.###.##.#.######..#.#..#...#.#...####.#..###.###..###.####.###..#...#.#...######..##......#..###...#
|
||||
.#...#.#..#.###....#.##.####.########..###.#.#.#.#.###.#.#.##.##...######.#..#...#...#..#....##.####
|
||||
###.#.#####..###..###.###...###.....#####.#...#.###.#...#..#..####...#.#..###..#.#.......#.....#..#.
|
||||
.##.#.#..##..#..##..##.#.###.##.##..#.#.##.##.##.#####...###.##...#..##.##.#..##.#.#.###....##....#.
|
||||
....##......#..##.###.##...#.######.#.#...#.###.######.#.####.....#.####.###....#..##..#.#.##.#...#.
|
||||
..##.#.......#....#.#........#..#..#..#...#.#.####..#####....#.....##...##.....###.#.#..#.##..##...#
|
||||
.#.###.###....#...#..###.#######..####.....#.##..#.#.#..##....#.##.#....#..#####.#..#.#######.#.#...
|
||||
...#.....###.#...#.#####..#..#..#.##.##.#......###.#..#.##.##.####..##..###.....##..##.#.###...#.#.#
|
||||
##...#.###.#.#.#.########.#.#.##..#.#..##....###.#..#.#........#.#......#.#.#...###...#.###.#.....##
|
||||
##.#...#.##.#.###..#.#.#####.####..##....##.##....#.##.##.#.##..#..#...#...##.#####.##...#####..#...
|
||||
..#..#..#####.#..#.#####..#..#......#.#......###..##..#..#.#..##.#####....####...#.##..#.##.#######.
|
||||
.##.....#..#.##...#...#.###.#.####...##.#...###.#..###.....#..###..####...###...#...#...#...###.#.##
|
||||
#.#####.##..#.##.###.....#.#####..#.#######...###.#####...#.###..#...#.....####..##..#.#..#..#.#.#.#
|
||||
.##.###.##.#....#..###..###.##..####..#.....####.##.#..#.##.###...#.....#.####.##....#.#....#.##.#.#
|
||||
#.#..########...#.#.##....##.#.#..##.#..#.#.#.##...#..##....######.#..##.#...#.#....##.#.##..##..#..
|
||||
.##..#.##.##...####....#.##..####..##.##..#...#...#...######.#..##.#.....#.#......####...####...####
|
||||
#..###..#.######...#...#..##.#....#..#..#####....#.####.#.#..###...#.####..#..####..##.##...#..#.#.#
|
||||
#####.#.#.##..#....#.##.##.###...#.#.#.##..######.#.#...#.#.##.....##.###..#..##..#...#.#....###.#..
|
||||
#..##.##.###.##..##.#.#.##.##..###.#..##.###...##.####.##..#.....##...##.#.######.###.##..###....##.
|
||||
#.##....###..#..##.###.#...#.####.......#....##..#.#####..#.#.###########.##.##..#..##.#......######
|
||||
###.##.###.##.#####..####.#####....#..##.###.....#..#.#.#..#.#.##..#.###..#..###..##.#####...#.#.#.#
|
||||
#.####.....#.#.##..######......##.#..#.##.##.###..####..##..##.##.#.##.#.#.#..##..#.###.####..##..##
|
||||
.....#...###...#...###.#.###.#.###.##.#.#...##.#.#..#..##..###.#..#.##..##..#.##..#.#.#.#.#...#.#.##
|
||||
##..#####....#.##.#..##.##.....##....###..###...####....#..##..#..#.##.#.#.#.#.....#.##.....##..###.
|
||||
######.#.##.###.#.#..##.#.##.##.....#.##..##.#..#...##.####..##.##..##...###.#......#####.....###.#.
|
||||
.#..#.###.#..###.#.#.##..##..###....#.#..###.##.#.##..###...###...##.##.###...#..##.###....######...
|
||||
##..#...#....#.#####..##.####...#...###........###..#...#.#.#.##....#..#.#...###.....###......####.#
|
||||
.#..##..##...##..#...###..##.####.##.#..#.#.#....##.##...#....###...###.##.#####.##.#...##.####....#
|
||||
......#....#####...####.##..#.##....###..#.#..#.....####.#...##..##..#.####...##..#..##.#.#.....####
|
||||
##..##.##.#####.#.####..###.##.###..#...##..#.#.#....#######....#...#...###.######....#####.##.#...#
|
||||
#.#.####..#.##..##.###.#.#...#.#......##.###...####...#.##...#.#.#...#.#.##..##...#...##...###.#####
|
||||
##....#.#######...##...#....#.##.#..#...##..#.#.#####.###.###.#.#..##.###..##.###.#.#.##.....#..##.#
|
||||
#.#.#.#...#..##.#..#####.#.###...###.#####....####...#.#.#...#...##.#...##.######...###...###.##..#.
|
||||
.######...#....#..#......#.#####.#....####.#....#.##..#.#.#.#..#.##.##...##.#.##.#####.#.###.#..#.#.
|
||||
#.##..#.#...####....##....#.######.###.##.######...##.....####.#.#..######.###...#.##.#####.###.....
|
||||
..##.#.#..#.##.#.#.##.##..###..#..#.#.#...##.#..#......#.#######.###.##.#...####.##..###..#.##....#.
|
||||
.#..#..####...##.###....###....#.#......#..#.###..#..#.###.#.....#.###.#..###..###..#.##.###...#...#
|
||||
.##....#.#.###......#..#.#..###...######.#..#.####..###...#.##.#.##....###..#..###...##.#.#...#.##.#
|
||||
.##...#..##.###.###.#....##......#.###.####...##..##.##..##...###.#.#.##.#..#...#.#..###...####.....
|
||||
#...####.##......###.#####.#..##...#######.##.#####.###.####...##.##.#####...###.###.####..##.#...#.
|
||||
###...#.#.#.#.###....##..###..####.##..#...#.#.##.##.##....##.##....#.....#...#......##....#...####.
|
||||
##.####.....#.##.####..#.#....#######.######..##.##.#..###..#.....#..###..#.##..#...#...###.##.##..#
|
||||
.#..#.#.#.#.####.#..#...#..#.##.#...#..#....#..##....#.##...#.##...#.#..##.#.##....#.#..#######..#..
|
||||
.#...#.#.#........#.##...####..###..#####..#.#..#.....##...#.####....###.#...###..#####..#...###.##.
|
||||
##.#.#..#.####..###.#.##.#...##.#..##.###...#.##.##.#####....##...#.#..####.#..#..##.#.#.#..#..##.#.
|
||||
.#....#..#..#.##.######...#....##..##..#.#...#.##.##.#######..##.##..##..##.#..#.##..####...#.#....#
|
||||
.#...#.......######...##..#..####....#.#...#..#.##.#.#.#..##.######...#...#.##.###.##..#.####.##..#.
|
||||
..#.#....##..#..####.##..#..##..#.#.#.#.#...#...##..#..#######..##..##.#..##..#..####.#.#.#.#####..#
|
||||
##...##.##..##....##..#........######.#.#.#..#.#.#.###...##.#.##..###....#.##...#.#...###.#.###..#..
|
||||
##......###.#.#......##.#.##.####.#..#...###..##.######.######.#..#####.#...##..#.#..###.####.#.##.#
|
||||
..##.#..#.#..#..###..##..##.##.#####..#.##....#..#.#.#..##...#.##.##.....##.##....###...#.#.###...#.
|
||||
###...##.##....#..###...#.##.##.#.#.##.##.###......#...#...#.###.#....##.#.###....#.#.##.#...##.#..#
|
||||
...#.#.#.#.##..#.#.##.....##.#.#..#...#...##.##..#..##.#####...######..#.##..#.#....###.#.#.##.#..#.
|
||||
....#####...#.#.##.#...####.......#.#...#.......#.##.....##.##..##...##....###.#.###.....###..######
|
||||
.###.#...##.#...#.##.##..#.#.######.#..##......##....#....#.....#.#.##.##.#####.#...##....#.........
|
||||
..#...#..##.#.###.##....#...######....#.#....#.####...#...####.#..#.....####.#.....#..#..#.......#.#
|
||||
#####..#.##..##.#####.#..##...##..####..###....#....##..#.##...#.#.#.#.#####.#.#...#..##....#.#.###.
|
||||
..##.#.##.....#.##..###...#.##.#..##...##..#####..#..#..##.#####.####...#....#..##...#.#....####..#.
|
||||
.##.##....#...#...####.##.#.....###.#...#.#..#..####.#.##.#.##.....#.#.#..#..######.#..#.##.##....#.
|
||||
.....#.##.#......###.#.#..######..#..#..#####..###.......#.#.##..#.#....####..#..###..#....#.##....#
|
||||
##.##..##....###.#####...####..##...........##.###..#...#..##...###.#.####....####..#.##.#.#.#.####.
|
||||
.##.....##..#.#..#.#.....#.#.##....##.#..#.##.#..#.####.##........##..#.##...#.##.#.#.........####..
|
||||
#..##..#.###.##..#.###..#######.#..#..#...###....#.##..#..###.###.#...#.##.....#......#...#..####...
|
||||
.#..##....##.#..#..#.#...##.##.#.#.#..##..##...#....###..#.##..#.#.####.#.#.#.#..#.#...#.#..#..#..#.
|
||||
#####..#.......#.###.#.######.##.###.#.###..###..##.#..#....#...#..##.##.#####..#.#.#.##......#.###.
|
||||
....##...#.#.##.####.#....##.##.#####.#####.#.#...#.#..######..####.###...#.#...#.#....###.#....##.#
|
||||
.###...##.#....#..##.######..........#.##..#.#....#.....#.#####..#.#..##......#..#...#.###.#.#.#...#
|
13
src/day18.rs
13
src/day18.rs
@ -29,14 +29,14 @@ impl Value {
|
||||
fn number(&self) -> Option<u32> {
|
||||
match self {
|
||||
Self::Number(n, _) => Some(*n),
|
||||
_ => None
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
fn index(&self) -> Option<usize> {
|
||||
match self {
|
||||
Self::Number(_, i) => Some(*i),
|
||||
_ => None
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
@ -104,8 +104,7 @@ fn find_exploded(tree: &Value, depth: usize) -> Option<&Value> {
|
||||
if depth == 4 && tree.is_number_pair() {
|
||||
Some(tree)
|
||||
} else {
|
||||
find_exploded(left, depth + 1)
|
||||
.or_else(|| find_exploded(right, depth + 1))
|
||||
find_exploded(left, depth + 1).or_else(|| find_exploded(right, depth + 1))
|
||||
}
|
||||
} else {
|
||||
None
|
||||
@ -114,11 +113,13 @@ fn find_exploded(tree: &Value, depth: usize) -> Option<&Value> {
|
||||
|
||||
fn find_number(tree: &mut Value, index: usize, n: u32) -> Option<&Value> {
|
||||
match tree {
|
||||
Value::Pair(left, right) => find_number(left, index, n).or_else(|| find_number(right, index, n)),
|
||||
Value::Pair(left, right) => {
|
||||
find_number(left, index, n).or_else(|| find_number(right, index, n))
|
||||
}
|
||||
Value::Number(_, i) if *i == index => {
|
||||
tree.add_number(n);
|
||||
Some(tree)
|
||||
},
|
||||
}
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
@ -17,15 +17,16 @@ impl FromStr for Report {
|
||||
|
||||
fn make_diffs(reports: &Vec<Report>) -> HashSet<Report> {
|
||||
let mut set = HashSet::new();
|
||||
for (i, report) in reports.iter().enumerate() {
|
||||
|
||||
}
|
||||
for (i, report) in reports.iter().enumerate() {}
|
||||
set
|
||||
}
|
||||
|
||||
fn main() {
|
||||
const INPUT: &str = include_str!("../inputs/day19.txt");
|
||||
let reports = INPUT.split("\n\n").map(|scanner| scanner.lines().map(|line| line.parse().unwrap()).collect()).collect::<Vec<Vec<Report>>>();
|
||||
let reports = INPUT
|
||||
.split("\n\n")
|
||||
.map(|scanner| scanner.lines().map(|line| line.parse().unwrap()).collect())
|
||||
.collect::<Vec<Vec<Report>>>();
|
||||
let diffs: Vec<HashSet<Report>> = reports.iter().map(make_diffs).collect();
|
||||
println!("solution {}", diffs.len());
|
||||
}
|
||||
|
158
src/day20.rs
Normal file
158
src/day20.rs
Normal file
@ -0,0 +1,158 @@
|
||||
use std::fmt;
|
||||
use std::str::FromStr;
|
||||
|
||||
#[derive(Clone)]
|
||||
struct Image {
|
||||
image: Vec<Vec<char>>,
|
||||
algorithm: Vec<char>,
|
||||
background: bool,
|
||||
}
|
||||
|
||||
impl Image {
|
||||
fn is_light(&self, x: i32, y: i32) -> bool {
|
||||
if x < 1 || y < 1 || x as usize > self.image[0].len() || y as usize > self.image.len() {
|
||||
return self.background;
|
||||
}
|
||||
match self.image[(y - 1) as usize][(x - 1) as usize] {
|
||||
'#' => true,
|
||||
'.' => false,
|
||||
p => panic!("invalid pixel '{}'", p),
|
||||
}
|
||||
}
|
||||
|
||||
fn enhance(self) -> Self {
|
||||
let image = (0..self.image.len() + 2)
|
||||
.map(|y| {
|
||||
(0..self.image[0].len() + 2)
|
||||
.map(|x| {
|
||||
let mut idx = 0;
|
||||
if self.is_light(x as i32 - 1, y as i32 - 1) {
|
||||
idx += 0x100;
|
||||
}
|
||||
if self.is_light(x as i32, y as i32 - 1) {
|
||||
idx += 0x080;
|
||||
}
|
||||
if self.is_light(x as i32 + 1, y as i32 - 1) {
|
||||
idx += 0x040;
|
||||
}
|
||||
if self.is_light(x as i32 - 1, y as i32) {
|
||||
idx += 0x020;
|
||||
}
|
||||
if self.is_light(x as i32, y as i32) {
|
||||
idx += 0x010;
|
||||
}
|
||||
if self.is_light(x as i32 + 1, y as i32) {
|
||||
idx += 0x008;
|
||||
}
|
||||
if self.is_light(x as i32 - 1, y as i32 + 1) {
|
||||
idx += 0x004;
|
||||
}
|
||||
if self.is_light(x as i32, y as i32 + 1) {
|
||||
idx += 0x002;
|
||||
}
|
||||
if self.is_light(x as i32 + 1, y as i32 + 1) {
|
||||
idx += 0x001;
|
||||
}
|
||||
self.algorithm[idx]
|
||||
})
|
||||
.collect()
|
||||
})
|
||||
.collect();
|
||||
let background = if self.algorithm[0] == '#' {
|
||||
!self.background
|
||||
} else {
|
||||
false
|
||||
};
|
||||
Image {
|
||||
image,
|
||||
algorithm: self.algorithm,
|
||||
background,
|
||||
}
|
||||
}
|
||||
|
||||
fn light_pixels(self) -> usize {
|
||||
let result = self.enhance().enhance();
|
||||
result
|
||||
.image
|
||||
.iter()
|
||||
.map(|row| row.iter().filter(|p| **p == '#').count())
|
||||
.sum()
|
||||
}
|
||||
|
||||
fn super_light_pixels(self) -> usize {
|
||||
let mut image = self;
|
||||
for _ in 0..50 {
|
||||
image = image.enhance();
|
||||
}
|
||||
image
|
||||
.image
|
||||
.iter()
|
||||
.map(|row| row.iter().filter(|p| **p == '#').count())
|
||||
.sum()
|
||||
}
|
||||
}
|
||||
|
||||
impl FromStr for Image {
|
||||
type Err = ();
|
||||
|
||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||
let (algorithm, image) = s.split_once("\n\n").unwrap();
|
||||
let algorithm = algorithm.chars().collect();
|
||||
let image = image
|
||||
.lines()
|
||||
.map(|line| line.trim_end().chars().collect())
|
||||
.collect();
|
||||
Ok(Image {
|
||||
image,
|
||||
algorithm,
|
||||
background: false,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Debug for Image {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
writeln!(
|
||||
f,
|
||||
"algorithm: {}\n",
|
||||
self.algorithm.iter().collect::<String>()
|
||||
)?;
|
||||
for row in self.image.iter() {
|
||||
writeln!(f, "{}", row.iter().collect::<String>())?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
const INPUT: &str = include_str!("../inputs/day20.txt");
|
||||
let image: Image = INPUT.parse().unwrap();
|
||||
println!("solution {}", image.clone().light_pixels());
|
||||
println!("solution {}", image.super_light_pixels());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_light_pixels() {
|
||||
const INPUT: &str = "..#.#..#####.#.#.#.###.##.....###.##.#..###.####..#####..#....#..#..##..###..######.###...####..#..#####..##..#.#####...##.#.#..#.##..#.#......#.###.######.###.####...#.##.##..#..#..#####.....#.#....###..#.##......#.....#..#..#..##..#...##.######.####.####.#.#...#.......#..#.#.#...####.##.#......#..#...##.#.##..#...##.#.##..###.#......#.#.......#.#.#.####.###.##...#.....####.#..#..#.##.#....##..#.####....##...##..#...#......#.#.......#.......##..####..#...#.#.#...##..#.#..###..#####........#..####......#..#
|
||||
|
||||
#..#.
|
||||
#....
|
||||
##..#
|
||||
..#..
|
||||
..###";
|
||||
let image: Image = INPUT.parse().unwrap();
|
||||
assert_eq!(image.light_pixels(), 35);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_super_light_pixels() {
|
||||
const INPUT: &str = "..#.#..#####.#.#.#.###.##.....###.##.#..###.####..#####..#....#..#..##..###..######.###...####..#..#####..##..#.#####...##.#.#..#.##..#.#......#.###.######.###.####...#.##.##..#..#..#####.....#.#....###..#.##......#.....#..#..#..##..#...##.######.####.####.#.#...#.......#..#.#.#...####.##.#......#..#...##.#.##..#...##.#.##..###.#......#.#.......#.#.#.####.###.##...#.....####.#..#..#.##.#....##..#.####....##...##..#...#......#.#.......#.......##..####..#...#.#.#...##..#.#..###..#####........#..####......#..#
|
||||
|
||||
#..#.
|
||||
#....
|
||||
##..#
|
||||
..#..
|
||||
..###";
|
||||
let image: Image = INPUT.parse().unwrap();
|
||||
assert_eq!(image.super_light_pixels(), 3351);
|
||||
}
|
Loading…
Reference in New Issue
Block a user