Day 18 part 1
This commit is contained in:
50
input/day18.txt
Normal file
50
input/day18.txt
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
|#..|#...|..|.#..|###|.....#.|.......||#..|....||.
|
||||||
|
#||..##.#........||#...##.|..###.|.||...|.#.|.|.#.
|
||||||
|
##.#.###....##....|..||#.||##.|.###|........||.##.
|
||||||
|
#.|.||#...|..####......|.#|#..#.#|##...||..#..|...
|
||||||
|
.....#..#.|.####..#..#...|||...||.|...#......#..|.
|
||||||
|
.|..#..#.......|...#.|...|.##....|#|..#|###..#..#.
|
||||||
|
.##..#..##..|.#|||.##..|..#.##..|....#..#|.##|.|#.
|
||||||
|
|#..|#...|...|.|.......#.#......|...|.#.|||.|||#.#
|
||||||
|
|....#...|..#..#.....#.|..#.#..|#|.#|...|..|#..|#|
|
||||||
|
.#...##..|#.##......##...#|||..|.....#.|..|...|..#
|
||||||
|
#.....|..|...||.|.|.....|....#|..|#...#|...#.....#
|
||||||
|
...|...###.||......|..#|..|...|.##|........#|#|..|
|
||||||
|
|.|.#.#......||#|||..|#....|#.|...#|..|.|.#|#.|.|.
|
||||||
|
###.#.|....|.......##.#|###.|#.#..#.|.#...#...###.
|
||||||
|
|###...|.....#.|.##..#...|#.#.|.##.#........#..|..
|
||||||
|
|.||.|...##...##|......#..|.##.##|..#..|#..#.##...
|
||||||
|
#....|#.....|...|...|............#..#|.....|.#.|.#
|
||||||
|
...#..|..|||#.|.......#|...#...##|.......####.|...
|
||||||
|
.#..|..#..|....||#.##.....|||...#..|.#..|.#..|..##
|
||||||
|
....#...##.........#....|..#.......#...|.....##.#.
|
||||||
|
|...|...|....#|####||###..|.|..|.||.#......#.|#...
|
||||||
|
.#.#|.|.|....#.....||...||..|...##.#..|.|.#......|
|
||||||
|
..|.......|||.|..#.#......|.|..##.||....|###....#.
|
||||||
|
##....#.......#.|#.##.........|.|....#...|.#|.|.#|
|
||||||
|
|#.##...|||||#.##.#...#.|#...|.||.|...|..#...#..|.
|
||||||
|
...#||..#.......||..|.###.#.|#......||..|.#.....#.
|
||||||
|
#..|.||#.#...|..........#.....#...#...###||.#.....
|
||||||
|
#..#.|###|#|..|##...##.#......#|.#.#|..#.......|#.
|
||||||
|
.|.....|.|..#.###|.#|.##.....|.|..|..|..#..|...##.
|
||||||
|
.|........#...#..|.|..||#....|....#..|.|........|#
|
||||||
|
....#.|...#|||...#......#...##......|#....#.||.#..
|
||||||
|
.|.....|....#......#.|#.|.|.|..#.#.|..##.#||.....#
|
||||||
|
.....#...|.#|..#..#|#.#|.|..|.#........#|..#|....#
|
||||||
|
|.||..##...|#.#||..|..#.|..|..#..|..#.|.#|.#...|#.
|
||||||
|
...|#.###...#..|#..##..||....#.||..#.|.|#.#..|..||
|
||||||
|
......|#|.#.#|.|....#..##|##|#...|.#.|.#....##|#..
|
||||||
|
#..||.....#....#....#.#.....|.....#....|....|...#.
|
||||||
|
.#....#.##..........|.||.#.....#|#|||.#..#|......|
|
||||||
|
..||..|....#..........#.|...#|.|#.|#..|#||.#...|#|
|
||||||
|
..#..#.#|......#|.....||.#..##.|.#..#.||...|.|||..
|
||||||
|
.#....|....#.|#...#..||..||.##..#.||....|.#|....|.
|
||||||
|
..#|.|.....#....#..|..||..#..##.|.||..||||#.#..|.|
|
||||||
|
.|#.|.||........#|.#|#....||..#||#...|..........##
|
||||||
|
..#|.|..|||..###..|||.#..#.#||||.#.|##...|#......|
|
||||||
|
..|...#|...|.#.#|.#...#.|..||##.#..#.|...#.#.#|#..
|
||||||
|
#..#..|##.#|......#...|#|##..#.|...#.#.....#..##..
|
||||||
|
..#.|..###|.|#.|........|.....|.....#..|.|.#...|.#
|
||||||
|
..#|.|#.#.|#..|....|#...|.....|........|.|##.|#||#
|
||||||
|
#.....##.#..#..#...|#||.#.#.#..|....|||.|.|......#
|
||||||
|
...#|#....|.#.#..##.|.....#....|.|||..##.|.#.|.##.
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
fn main() {
|
fn main() {
|
||||||
aoc_2018::tasks::day17::task1();
|
aoc_2018::tasks::day18::task1();
|
||||||
}
|
}
|
||||||
|
|||||||
99
src/tasks/day18.rs
Normal file
99
src/tasks/day18.rs
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
use itertools::Itertools;
|
||||||
|
|
||||||
|
use crate::utils;
|
||||||
|
|
||||||
|
pub fn task1() {
|
||||||
|
let input = utils::read_file("input/day18.txt");
|
||||||
|
let initial: HashMap<Pos, char> = input
|
||||||
|
.lines()
|
||||||
|
.enumerate()
|
||||||
|
.flat_map(|(y, line)| {
|
||||||
|
line.chars()
|
||||||
|
.enumerate()
|
||||||
|
.map(|(x, c)| (Pos(x as i32, y as i32), c))
|
||||||
|
.collect_vec()
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
let fin = (0..10).fold(initial, |map, _| {
|
||||||
|
printmap(&map);
|
||||||
|
map.keys()
|
||||||
|
.map(|p| {
|
||||||
|
let old = map[p];
|
||||||
|
let new = match old {
|
||||||
|
'.' => {
|
||||||
|
if neighbors(&map, *p)
|
||||||
|
.into_iter()
|
||||||
|
.filter(|c| *c == '|')
|
||||||
|
.count()
|
||||||
|
>= 3
|
||||||
|
{
|
||||||
|
'|'
|
||||||
|
} else {
|
||||||
|
'.'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'|' => {
|
||||||
|
if neighbors(&map, *p)
|
||||||
|
.into_iter()
|
||||||
|
.filter(|c| *c == '#')
|
||||||
|
.count()
|
||||||
|
>= 3
|
||||||
|
{
|
||||||
|
'#'
|
||||||
|
} else {
|
||||||
|
'|'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'#' => {
|
||||||
|
if neighbors(&map, *p).contains(&'#') && neighbors(&map, *p).contains(&'|')
|
||||||
|
{
|
||||||
|
'#'
|
||||||
|
} else {
|
||||||
|
'.'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => panic!("unknown type"),
|
||||||
|
};
|
||||||
|
(*p, new)
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
|
});
|
||||||
|
let trees = fin.values().filter(|c| **c == '|').count();
|
||||||
|
let lumberyards = fin.values().filter(|c| **c == '#').count();
|
||||||
|
println!("Part 1 - {trees} x {lumberyards} = {}", trees * lumberyards);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn printmap(map: &HashMap<Pos, char>) {
|
||||||
|
println!();
|
||||||
|
let (x_min, x_max) = map.keys().map(|p| p.0).minmax().into_option().unwrap();
|
||||||
|
let (_y_min, y_max) = map.keys().map(|p| p.1).minmax().into_option().unwrap();
|
||||||
|
|
||||||
|
for y in 0..=y_max {
|
||||||
|
for x in x_min..=x_max {
|
||||||
|
let s = map[&Pos(x, y)];
|
||||||
|
print!("{s}");
|
||||||
|
}
|
||||||
|
print!("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Hash, Eq, PartialEq, Clone, Copy)]
|
||||||
|
struct Pos(i32, i32);
|
||||||
|
|
||||||
|
fn neighbors(map: &HashMap<Pos, char>, p: Pos) -> Vec<char> {
|
||||||
|
[
|
||||||
|
Pos(p.0 - 1, p.1 - 1),
|
||||||
|
Pos(p.0 - 1, p.1),
|
||||||
|
Pos(p.0 - 1, p.1 + 1),
|
||||||
|
Pos(p.0, p.1 - 1),
|
||||||
|
Pos(p.0, p.1 + 1),
|
||||||
|
Pos(p.0 + 1, p.1 - 1),
|
||||||
|
Pos(p.0 + 1, p.1),
|
||||||
|
Pos(p.0 + 1, p.1 + 1),
|
||||||
|
]
|
||||||
|
.into_iter()
|
||||||
|
.flat_map(|pos| map.get(&pos).map(|c| *c))
|
||||||
|
.collect_vec()
|
||||||
|
}
|
||||||
@@ -14,6 +14,7 @@ pub mod day13;
|
|||||||
pub mod day14;
|
pub mod day14;
|
||||||
pub mod day15;
|
pub mod day15;
|
||||||
pub mod day17;
|
pub mod day17;
|
||||||
|
pub mod day18;
|
||||||
pub mod day20;
|
pub mod day20;
|
||||||
pub mod day22;
|
pub mod day22;
|
||||||
pub mod day23;
|
pub mod day23;
|
||||||
|
|||||||
Reference in New Issue
Block a user