Add 2020/11 part 1
This commit is contained in:
parent
c70f62f4cb
commit
cd4f399ed6
91
2020/inputs/day11
Normal file
91
2020/inputs/day11
Normal file
@ -0,0 +1,91 @@
|
||||
LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLL.L.LLLLLLL.LLLLLLL.LLLLLL.LL.LLLL.LLLLLLLLLLLLLLL
|
||||
LLL.LLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLLLLLL.LLLLLLL.LLLL.LLL....LLL.LLL.LLLLLLL.LLL.LLLLL.LLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLL.LLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLL
|
||||
LLLL.LLLL.LLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLL.LLL.LLLLL.LLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLL.LLLL.LLLLLLL.L.LLL.LLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL.LLL..LL.LLL
|
||||
LLLLLLLLL.LLLLLLLLLLL.LLLLL.LLL.LLLLLL.LLLL.LL.L.LLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLL.LLLLLL.L.LLLLLLLLLL.LLL.LLLL.LLLLLLLLLLLLL.LLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLL
|
||||
....L..L....L...L.......L.LL.....L..L...LLLL.LLL..L.L...LL..L...LL.....L..LL.....L....L.L..L
|
||||
LLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLLLL.LLLLLLLLLLL
|
||||
LLLLL.LLL.LLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL..LLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLLLL.LL..LLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLL..LLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLLLLLLL.LLLLLLLLLLL.LLLL.LLLLLLLLL.L.LLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLL.LLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLL.LLL.LLLLL.LLLLLLLLLLLLLLLLLLLLL..LLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLL
|
||||
.L..L......L.L....L...L..........L.L....L...LL....LL....LL...LLL....LL..L...L...L.........L.
|
||||
LLLLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLL.LL.LLLLLLLLLLLLLLLLLLLLL..LLLLLLLLLLLLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLLLL.LLLLLLL.LLLLLL.LLLLLLLLLLL.LL.LLLLLLL.LLLLLLL.L.LLL.LLLL.LLLLLLLLLLL
|
||||
LLLLLL.LL.LLLL.LLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLL.LL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL..LLLLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLL.L.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLL.LL.L.LLLLLLLLLLLLLL.L.LLLLLLLLLLL
|
||||
LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LL.LLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLL
|
||||
..L.L.L..L.L.....LL..L........L..L....L...LL.........L.L.L.L..L......L.........L..L....L....
|
||||
LLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLL.L.LLLL.LLLLLLLLL.LLLLLLL.LLLLLLL.L.LLLLLLLLLLLLLLL.LLLL
|
||||
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLL.LLLL.LLLLLLLLLL..LLLLLLLLL.LLLLLLLLLLL.LLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLL
|
||||
LLLL.LLLL.LLL..LLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLL.LLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLL.LLL.LLLL.LLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLLL.LLLL.LLLLLLL.L.LL.LLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLL.L.LLLLLLLL.LL.LLLLLLLL
|
||||
LLLLLLL.LLLLLL.LLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLL
|
||||
L...L.......LL.LL.L....L...L.....L.......L.........L.L.L..LL.L.L.L.L..L....L.L...L.L.LL.....
|
||||
LL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLL..LLLLLLLLL.LLLLLLLLLLLLLLLLLLLL
|
||||
LLLLL.LLL.LLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL.LLL.LLLLLL.
|
||||
LLLLLLLLL.LLLL.LLLLLL.LLLLLLLLL.LLLLLL..LLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLL.
|
||||
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLL..LLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLL.LL
|
||||
..LLL.L..L..L..L..L..L.L...LL..L.....LLL.L..LL.....LLL.......L.L...L........LL........L....L
|
||||
LLLLLLLLL.LLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLL.LLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLLLLLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLL
|
||||
L.LLLLLLL.LLLL.LLLLLL.LLLLLLLLL.LL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLL
|
||||
LL.LL...L......L.L.....L.........L....L...L..L..LLL.L...L......L.L.....LL..LL..LLL....L..L.L
|
||||
LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL
|
||||
LL.LLLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLL.LLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLL.L.LLLLLLLLL
|
||||
LLLLLLL.L.LLLL.LLLL.L.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLL.LL
|
||||
L..L.L....L......LLLL...L....LL...L..LLL......LLL.LL.LLL...LL..L...LLL........L.....LL.L.LLL
|
||||
LLLLLLLLL.LLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLL.LLLLLL.LL.LLLLLLLL.LLLLLLLLLLL
|
||||
LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLL.L.LLLLLLL.LLLLLLL.LLLLLLL.L.LL.LLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLL..LLLLLL.LLLL.LLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLL
|
||||
LL.......L......L...LL.......LL.LL.LL.L.LL.L..L.......L.L.LLLL.LL...LL......LLL..L....LLL...
|
||||
LLLLLLLLL.LLL..LLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLLLLLL.LLLLL.LLLLLLLL.LL.LLLLLLLLL.L.LLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL.LLL
|
||||
LLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLL.LLLLLLLLL.L.LLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLL.LLLLLL.LLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLL..LLLLLLLL.LLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL.LLLLLLLLL
|
||||
LLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLL.LLLLLLL.L.LLLLLLLLLLLLLLLLLLLL
|
||||
...L..L..L..L...L.........L.L.L..LLL.....LL......L..LLL..L.L.......L.L.L..LLL...........L...
|
||||
LLLLLLLLL.LLLL..LLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLL.LLLLL.LLL.LLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLLLL.LLLL.L.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL.L.LLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLL..L.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.L.LLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLLL.LLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLL.LLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLL.LLL.LLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLL.LLL.LLLLL.LLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLL.LLLLLLL.LL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLL..LLLLLLLLLLLLLLLLLLL
|
||||
..L.LLL.....L....L.L.L..L.L..L.L..LL.......L.L.L......L..L..L..L..L.......L...LL..LL..L...LL
|
||||
LLLLLLLLL.LL.LLLL.LLL.LLLLLLLLLL.LLLLL.LLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL..LLLLLL.L.LLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLL.LL.LLLLLL.LLLLLL.L.LL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLLLLLLLLL.LL.LLLLLL.LLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLL.LLLLLL.L.LLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLL.LLLL..LLLLLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLLLLLL..LLLLLLLLLLLLLLLL.LLLL.L.LLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL..LL.LLLLL.LLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLL.L
|
||||
LLLL.LLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLL.LLLL
|
||||
LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL..LLLLLLLLLLL.LLLLLLLLL.L.LLLLLLLLLLLLLLL.LLLLLLLL..LLLLLLLLLL
|
||||
LLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLL.LLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLLLLL.LLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLL.LLLLLL..LLLLLL.LLLLLLLLLLLLLLLLLLLLLLL
|
||||
L.LLLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLL.LLL.LLLLLL..LLLLLLLLLLLLLLLLLL.LLL.LLLLLLL
|
@ -8,7 +8,7 @@ sed -i -e '$a\' inputs/day$today
|
||||
|
||||
echo '#![feature(test)]
|
||||
extern crate test;
|
||||
use aoc::common::*;
|
||||
use aoc2020::common::*;
|
||||
|
||||
type Parsed = Vec<usize>;
|
||||
|
||||
@ -44,9 +44,9 @@ mod tests {
|
||||
|
||||
const TEST_INPUT: &str = "";
|
||||
|
||||
test!(part1 == 0);
|
||||
test!(part2 == 0);
|
||||
bench!(part1 == 0);
|
||||
bench!(part2 == 0);
|
||||
test!(part1() == 0);
|
||||
test!(part2() == 0);
|
||||
bench!(part1() == 0);
|
||||
bench!(part2() == 0);
|
||||
bench_input!(len == 0);
|
||||
}' > src/bin/day$today.rs
|
||||
|
177
2020/src/bin/day11.rs
Normal file
177
2020/src/bin/day11.rs
Normal file
@ -0,0 +1,177 @@
|
||||
#![feature(test)]
|
||||
extern crate test;
|
||||
use aoc2020::{common::*, grid::*};
|
||||
use std::{
|
||||
collections::HashMap, fmt::{self, Display, Formatter}
|
||||
};
|
||||
|
||||
#[derive(Debug, PartialEq, Clone, Copy)]
|
||||
enum Tile {
|
||||
Floor,
|
||||
Empty,
|
||||
Occupied,
|
||||
}
|
||||
|
||||
impl Display for Tile {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
||||
f.write_str(match self {
|
||||
Tile::Floor => ".",
|
||||
Tile::Empty => "L",
|
||||
Tile::Occupied => "#",
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl From<char> for Tile {
|
||||
fn from(c: char) -> Self {
|
||||
match c {
|
||||
'.' => Tile::Floor,
|
||||
'L' => Tile::Empty,
|
||||
'#' => Tile::Occupied,
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for &Tile {
|
||||
fn default() -> Self {
|
||||
&Tile::Floor
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for Tile {
|
||||
fn default() -> Self {
|
||||
Tile::Floor
|
||||
}
|
||||
}
|
||||
|
||||
type Parsed = HashMap<Position2D, Tile>;
|
||||
|
||||
fn read_input() -> String {
|
||||
read_file(11)
|
||||
}
|
||||
|
||||
fn parse_input(raw: &str) -> Parsed {
|
||||
raw.lines()
|
||||
.enumerate()
|
||||
.flat_map(move |(y, l)| {
|
||||
l.chars()
|
||||
.enumerate()
|
||||
.map(move |(x, c)| (Position2D { x: x as i64, y: y as i64 }, Tile::from(c)))
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
|
||||
fn occupied_neighbors(pos: &Position2D, grid: &Parsed) -> usize {
|
||||
pos.moore()
|
||||
.iter()
|
||||
.filter(|p| grid.get(&p).unwrap_or_default() == &Tile::Occupied)
|
||||
.count()
|
||||
}
|
||||
|
||||
fn make_step(previous: &Parsed) -> (Parsed, bool) {
|
||||
let mut grid = previous.to_owned();
|
||||
let mut changed = false;
|
||||
for (pos, tile) in grid.iter_mut() {
|
||||
match tile {
|
||||
Tile::Floor => (),
|
||||
Tile::Empty => {
|
||||
if occupied_neighbors(&pos, &previous) == 0 {
|
||||
*tile = Tile::Occupied;
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
Tile::Occupied => {
|
||||
if occupied_neighbors(&pos, &previous) >= 4 {
|
||||
*tile = Tile::Empty;
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
(grid, changed)
|
||||
}
|
||||
|
||||
fn part1(parsed: &Parsed) -> usize {
|
||||
let mut p = parsed.to_owned();
|
||||
loop {
|
||||
let (parsed, changed) = make_step(&p);
|
||||
if !changed {
|
||||
break;
|
||||
}
|
||||
// println!("{}", draw_ascii(&parsed));
|
||||
p = parsed;
|
||||
}
|
||||
p.iter().filter(|(_, t)| t == &&Tile::Occupied).count()
|
||||
}
|
||||
|
||||
const DIRECTIONS: [(i64, i64); 8] = [(0, 1), (1, 0), (1, 1), (0, -1), (-1, 0), (-1, -1), (-1, 1), (1, -1)];
|
||||
|
||||
fn part2(parsed: &Parsed) -> usize {
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let input = parse_input(&read_input());
|
||||
println!("Part 1: {}", part1(&input));
|
||||
// println!("Part 2: {}", part2(&input));
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use aoc2020::*;
|
||||
use paste::paste;
|
||||
use test::black_box;
|
||||
|
||||
const TEST_INPUT: &str = "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";
|
||||
|
||||
const AFTER_1_STEP: &str = "#.##.##.##
|
||||
#######.##
|
||||
#.#.#..#..
|
||||
####.##.##
|
||||
#.##.##.##
|
||||
#.#####.##
|
||||
..#.#.....
|
||||
##########
|
||||
#.######.#
|
||||
#.#####.##";
|
||||
|
||||
const AFTER_2_STEPS: &str = "#.LL.L#.##
|
||||
#LLLLLL.L#
|
||||
L.L.L..L..
|
||||
#LLL.LL.L#
|
||||
#.LL.LL.LL
|
||||
#.LLLL#.##
|
||||
..L.L.....
|
||||
#LLLLLLLL#
|
||||
#.LLLLLL.L
|
||||
#.#LLLL.##";
|
||||
|
||||
#[test]
|
||||
fn step_test() {
|
||||
let input = parse_input(TEST_INPUT);
|
||||
let (first_step, changed) = make_step(&input);
|
||||
let after_first = parse_input(AFTER_1_STEP);
|
||||
assert_eq!(draw_ascii(&first_step, Tile::Floor), draw_ascii(&after_first, Tile::Floor));
|
||||
assert_eq!((&first_step, changed), (&after_first, true));
|
||||
let (second_step, changed) = make_step(&first_step);
|
||||
let after_second = parse_input(AFTER_2_STEPS);
|
||||
assert_eq!((second_step, changed), (after_second, true));
|
||||
}
|
||||
|
||||
test!(part1() == 37);
|
||||
//test!(part2() == 0);
|
||||
//bench!(part1() == 0);
|
||||
//bench!(part2() == 0);
|
||||
//bench_input!(len == 0);
|
||||
}
|
@ -34,12 +34,12 @@ fn get_boundaries(input: &[&Position2D]) -> Boundaries {
|
||||
Boundaries { x_min, x_max, y_min, y_max }
|
||||
}
|
||||
|
||||
pub fn draw_ascii<T: Display, S: BuildHasher>(coordinates: &HashMap<Position2D, T, S>, default: T) -> String {
|
||||
pub fn draw_ascii<T: Display + Default, S: BuildHasher>(coordinates: &HashMap<Position2D, T, S>) -> String {
|
||||
let b = get_boundaries(&coordinates.keys().collect::<Vec<_>>());
|
||||
join(
|
||||
(b.y_min..=b.y_max).rev().map(|y| {
|
||||
(b.x_min..=b.x_max)
|
||||
.map(|x| coordinates.get(&(x, y).into()).unwrap_or(&default).to_string())
|
||||
.map(|x| coordinates.get(&(x, y).into()).unwrap_or(&T::default()).to_string())
|
||||
.collect::<String>()
|
||||
}),
|
||||
"\n",
|
||||
|
Loading…
Reference in New Issue
Block a user