mirror of
https://github.com/bertptrs/adventofcode.git
synced 2025-12-25 21:00:31 +01:00
Implementation day 3
This commit is contained in:
323
2020/inputs/03.txt
Normal file
323
2020/inputs/03.txt
Normal file
@@ -0,0 +1,323 @@
|
|||||||
|
..#......###....#...##..#.#....
|
||||||
|
.#.#.....#.##.....###...##...##
|
||||||
|
..#.#..#...........#.#..#......
|
||||||
|
..#......#..........###........
|
||||||
|
...#..###..##.#..#.......##..##
|
||||||
|
......#.#.##...#...#....###....
|
||||||
|
..........##.....##..##......#.
|
||||||
|
......#...........#............
|
||||||
|
#....#..........#..............
|
||||||
|
.#........##.............###.##
|
||||||
|
....#.........#.......#.#....##
|
||||||
|
#.#..#..#..#.......#...#....##.
|
||||||
|
.#........#......#.##.......#..
|
||||||
|
..#.....#####.....#....#..#..##
|
||||||
|
.......#..##.......#......#.###
|
||||||
|
..#.#...#......#.##...#........
|
||||||
|
##...................#...##..#.
|
||||||
|
......#...#.##...##.#......#..#
|
||||||
|
.#.................#..##...#...
|
||||||
|
...#.....#.......##.....#.#....
|
||||||
|
.......#.#......#.....#..#..##.
|
||||||
|
..........#........#...........
|
||||||
|
..#.#..........................
|
||||||
|
.#.##..#.#...#...#.........#...
|
||||||
|
.....#....#.....#..#.....#.....
|
||||||
|
...#.#.#.....#.#..#.......#..#.
|
||||||
|
.....#...###...##...#......##..
|
||||||
|
#.###......#.#...#.#.#..###....
|
||||||
|
#.....#..##......#..........#.#
|
||||||
|
#...............#........#.#..#
|
||||||
|
.....#..#.........#......##.#..
|
||||||
|
.....#.##.##..#..##............
|
||||||
|
...#......##...............#.#.
|
||||||
|
.#..#.#............##.#........
|
||||||
|
#.....#..###.............##.#..
|
||||||
|
...##..#.#..#...........#..#...
|
||||||
|
#....#.........#.#.............
|
||||||
|
##.#.........#..###......#.#..#
|
||||||
|
...#...#......#.#.#.##..#.##...
|
||||||
|
.....##............#.##.##..#..
|
||||||
|
....#................#.##..#..#
|
||||||
|
...#..#.......#...#..#........#
|
||||||
|
....#...#...#................#.
|
||||||
|
....##...............#.#...#...
|
||||||
|
.#.....###...#.......#.##......
|
||||||
|
....######.#..............###.#
|
||||||
|
.#..#.........##...............
|
||||||
|
................##.#..#....###.
|
||||||
|
.......#............#.#..#..#..
|
||||||
|
......#.#...............##.#...
|
||||||
|
...#..####.#...#..#..#......#..
|
||||||
|
....#.#...#.....#.........#..##
|
||||||
|
.##..#...#......##....##.#.#...
|
||||||
|
.##.#.........##...#....#......
|
||||||
|
..#.#..#...#.#..#.......#...#.#
|
||||||
|
.........#..#.....##..#........
|
||||||
|
..#......#..##.....#..#...###..
|
||||||
|
..#...#....#.#..#..#.#.#..#.#..
|
||||||
|
...#..#####.....#......#.......
|
||||||
|
#.#............#......#..#...#.
|
||||||
|
.........#..........###.......#
|
||||||
|
......#....#..#.##.#......#..#.
|
||||||
|
...........##.#....#.#..#......
|
||||||
|
..#...................#..#.#...
|
||||||
|
#....##.............##....#...#
|
||||||
|
##..#....#.........#..........#
|
||||||
|
....#.#.#...#..#........#.##..#
|
||||||
|
...............#...#..##..#....
|
||||||
|
.##.......#.......#...........#
|
||||||
|
#.........................##...
|
||||||
|
#........#.#..#..##..####.#....
|
||||||
|
...................##.....###..
|
||||||
|
.#.......#..#......#......#...#
|
||||||
|
..#.........#...#..........#...
|
||||||
|
..........#......#....#........
|
||||||
|
.#......#..#...#..#...##....##.
|
||||||
|
...#.#..#..#......#.....##.####
|
||||||
|
.......#.#....#.......#........
|
||||||
|
#...#.#...##..##.#......#......
|
||||||
|
.#.........#...................
|
||||||
|
...#..........#.#......#.......
|
||||||
|
...#.....##....#..........#....
|
||||||
|
.#..........##..#..#..##....#.#
|
||||||
|
.##.#..........#...#.##.......#
|
||||||
|
#...###....#..#.#...#..#.......
|
||||||
|
..................##...........
|
||||||
|
..#...##.#...........#....#.##.
|
||||||
|
..#......#..##..#....##..#...#.
|
||||||
|
..#....#.....#.##..#.......#..#
|
||||||
|
#...#....#..#.#....#......##...
|
||||||
|
.......##..#..........#........
|
||||||
|
..#.............##.#.....#...#.
|
||||||
|
...............#....#...#...##.
|
||||||
|
##...........#.......#.##......
|
||||||
|
#..#...........#.........#.....
|
||||||
|
....###.............###.##..##.
|
||||||
|
.........#.#.....###.......#...
|
||||||
|
..#.##....#.#..........#....#..
|
||||||
|
#........#....##...#..#........
|
||||||
|
......#..........###..#.#......
|
||||||
|
.....#.#......##.....#..##...#.
|
||||||
|
.#.......#......#...#...#...#.#
|
||||||
|
.#..........##.......#.....##.#
|
||||||
|
###.#...#....#.....#...#......#
|
||||||
|
..#.#.#..#.##.#..#.............
|
||||||
|
.....#.........................
|
||||||
|
.#..###..#...#...#..#..#...#.#.
|
||||||
|
#................##...##.##....
|
||||||
|
......#...#...#..........#...#.
|
||||||
|
..........#.....##.............
|
||||||
|
..#.#......#........#.......#..
|
||||||
|
........##.............#.......
|
||||||
|
.......#......#.##.#..#........
|
||||||
|
#.#.#....#........#..........#.
|
||||||
|
##..##......#..#..#.....#.#..##
|
||||||
|
##..#..........#...............
|
||||||
|
#.....##...#.#......#.......#.#
|
||||||
|
#.....#...#....#..#.....##.....
|
||||||
|
##..........#.#.....#....#...##
|
||||||
|
..##.###..#.....#.......#...#..
|
||||||
|
.#.#.......#......###........#.
|
||||||
|
.#..............#.#..###.......
|
||||||
|
.#....#..##.........#..#.#.....
|
||||||
|
....#....#.#....#..#.......##.#
|
||||||
|
#.......#.......#.........#....
|
||||||
|
...#....#....#.....##..#..#.#.#
|
||||||
|
........#....#...........#.....
|
||||||
|
.#......##.#.#.##..............
|
||||||
|
#..#.#.....##........#........#
|
||||||
|
##...#.#.......##.......#...#..
|
||||||
|
#...#.....#.##...##.#.....#....
|
||||||
|
....#..##...#........#.#...#...
|
||||||
|
...#....#.#.#..###...##.#.....#
|
||||||
|
......#..#.....#..#........##..
|
||||||
|
.......#.....#.#.........#.#..#
|
||||||
|
..#.......#.#.#.#.#....#.##...#
|
||||||
|
.#...#........#..##..#......#..
|
||||||
|
.#..#............#...#..#.#....
|
||||||
|
...##......#......#............
|
||||||
|
..#...#.#.....#.....#..##.#....
|
||||||
|
.#......#.#......#..#.#........
|
||||||
|
..#..........##...#.#.....#..#.
|
||||||
|
#...#.....#..#...#.............
|
||||||
|
..##.................#....#....
|
||||||
|
.#....#.......#..##....#......#
|
||||||
|
.#....###............##....##.#
|
||||||
|
##..#........#..#...#.......#..
|
||||||
|
.....#.....#.#.#.##.........#..
|
||||||
|
.......#..#....#...#...#.......
|
||||||
|
...#...#...#.#.#..#.#.....#....
|
||||||
|
#.#........#..#.##..#..###.....
|
||||||
|
..................#..#.........
|
||||||
|
#.#.....#..##.........#.......#
|
||||||
|
###..#.......#..............#..
|
||||||
|
......#..#.....###..........#..
|
||||||
|
....#.#...#..#...........#.#...
|
||||||
|
...#.....#.......#.....#.#.....
|
||||||
|
#.....##..#......##...........#
|
||||||
|
#...###...........##..#...#.##.
|
||||||
|
......##.##.#...#..#....#......
|
||||||
|
...#.#......##.#......##....#.#
|
||||||
|
..............#.#.###.......#..
|
||||||
|
........#....#.......##..#..###
|
||||||
|
...#.....##.#....#......##..#.#
|
||||||
|
..##........#.....#.#..#...#...
|
||||||
|
.#..#.##.........#.....#...#..#
|
||||||
|
..#..#....#...........#........
|
||||||
|
.#...#....................#....
|
||||||
|
##.....##....#.............#.#.
|
||||||
|
....#.#..#.#..#.#.#..........##
|
||||||
|
.............##.#.....#..#..#..
|
||||||
|
.#....#.....##...#.###.........
|
||||||
|
..#........#........#.#..###...
|
||||||
|
.##....#...#...#.......#...#.#.
|
||||||
|
..#...#...#..##........#..#....
|
||||||
|
..##.#..#..#.....#......#.#..#.
|
||||||
|
.#........#..#....#..#.........
|
||||||
|
..#.#.....#.##..#........###.#.
|
||||||
|
.....#.##.....##.#.............
|
||||||
|
#.........#.......#...##...#...
|
||||||
|
..#.##.#..#..#............#....
|
||||||
|
.##....#..#............#.....#.
|
||||||
|
###........##.....##.#...#.....
|
||||||
|
#......##..##.#.#.#.#.#.#..##..
|
||||||
|
.....###.....#....#......#....#
|
||||||
|
........#.........##...#....#.#
|
||||||
|
.#.#.....#.#..#..##......#...#.
|
||||||
|
...#.##....#..#.###..#..##.....
|
||||||
|
....#..........##..#..#..#..#..
|
||||||
|
...#..#.##..#..#....#.........#
|
||||||
|
.....#..###.#.....#.....#..#...
|
||||||
|
......#...#....#.##...#.#......
|
||||||
|
.#.###..##.....##.##......##...
|
||||||
|
.....#.#...........#.#.........
|
||||||
|
#........#...#..#......##.#....
|
||||||
|
..#.......##....##....#.##.#..#
|
||||||
|
...###.#.........#......#.....#
|
||||||
|
..#.##..#....#.....##...#.##...
|
||||||
|
....##.##.............#...#....
|
||||||
|
##..#...#..#..#..#.............
|
||||||
|
.....#.....#.....#.............
|
||||||
|
...#.##.......#..#.#.....#....#
|
||||||
|
#.....##.........#......##.....
|
||||||
|
.....##..........#..#...#..#...
|
||||||
|
#...###....#.......#...##......
|
||||||
|
.#....#..#......#.....#...#.#..
|
||||||
|
#........#.#.#...#.....###.#.##
|
||||||
|
##...#...##..#..#....#.........
|
||||||
|
....#............#..#.....#....
|
||||||
|
#......#.........##....#.......
|
||||||
|
.#..#..#........#.............#
|
||||||
|
.##..........#......#.......#..
|
||||||
|
#............#..#....#.........
|
||||||
|
....#.#.....#.##...#.....#.#...
|
||||||
|
...#.#..#...##..#...#.#.#......
|
||||||
|
#....#..#.........##..#.#.#..##
|
||||||
|
.#...#..............#.......#..
|
||||||
|
#...#.....#.#........##......##
|
||||||
|
...#....##.####.#.........#.#.#
|
||||||
|
....###.#..#............#.#..#.
|
||||||
|
....#......#...#......##.#.#.#.
|
||||||
|
.....#..#.#.##.#...##..........
|
||||||
|
##..#...#.#...###.............#
|
||||||
|
....#...#..#.....#.#..#..#..#..
|
||||||
|
#..........####......#.....###.
|
||||||
|
.........#........#.##.#...#...
|
||||||
|
.........#..........#.#..###...
|
||||||
|
.....##........##.........#...#
|
||||||
|
..##....#...#.......##.........
|
||||||
|
.....#.#......##....#...#...#..
|
||||||
|
.##..#..##.....................
|
||||||
|
.......#...#..#..#...##....#...
|
||||||
|
.#...#.......###...#..#..#.....
|
||||||
|
.......#.....##.##.#.......#..#
|
||||||
|
.##......#...#....#..#......##.
|
||||||
|
.##....#..#....#...#...#.......
|
||||||
|
.........##..#..#.#.#.....##...
|
||||||
|
...#..............#..#.....####
|
||||||
|
.#.#.#..#.......#.......#......
|
||||||
|
..#.#......#..........#........
|
||||||
|
.#...#.#..#.......#..#..#..#...
|
||||||
|
.......##.#...#..#....#.....#..
|
||||||
|
.##...##....##...#........####.
|
||||||
|
....#.#..##....#...#....#.#....
|
||||||
|
.....#.....#..#..#.#.##..#.....
|
||||||
|
..#....#..............#....#...
|
||||||
|
..#.#.#.....##.#.....#..##.....
|
||||||
|
....#.....#....#...#...#..#.#..
|
||||||
|
#...#...........#..#..#........
|
||||||
|
...#.#..#.........##.#...#..##.
|
||||||
|
......#.#.........#.#...#......
|
||||||
|
......#..##.###......##.#....#.
|
||||||
|
.....#...#..#.......#..........
|
||||||
|
.#...#.......#.....###......#..
|
||||||
|
...........##.....#..#..#....#.
|
||||||
|
..#....#..#...#......#.......#.
|
||||||
|
..#...#...#.#..#....#...#......
|
||||||
|
.......#....###.####...###.#...
|
||||||
|
#.##.#.......#.......#....#.#.#
|
||||||
|
.##..........#.....#..###......
|
||||||
|
.....#...........#.##..#....#..
|
||||||
|
........##.....#.#........##...
|
||||||
|
#..#..#..................##....
|
||||||
|
#...###..........#.............
|
||||||
|
.......#.#.......#.#.......##..
|
||||||
|
.....#.#...#....#...####.....#.
|
||||||
|
..##.....##.......#....#.......
|
||||||
|
##..........#...#..##....##....
|
||||||
|
..........#..#......#........#.
|
||||||
|
##..#....#..#....#.....##....#.
|
||||||
|
##.##.....#...##.##.......#....
|
||||||
|
..#..#.###.#..##.#..#..#...#...
|
||||||
|
.#..#.....#........#...##.#....
|
||||||
|
..#..#.....#.#......##.#.#.....
|
||||||
|
.#..##...#.#....#...#...#.#.##.
|
||||||
|
.........#...#....###.#.....#..
|
||||||
|
...........###.#.#..#..#...#.#.
|
||||||
|
##...#......##...........#..#..
|
||||||
|
.........##..#...#.......#.....
|
||||||
|
#......#.#..........#..#.......
|
||||||
|
...#.................#....#....
|
||||||
|
#....#......................##.
|
||||||
|
##.......#..#......#.#...###.#.
|
||||||
|
..#....#..#.#......#...........
|
||||||
|
...#...........###.#.#.........
|
||||||
|
..#..##.....#.....##...##......
|
||||||
|
..#..#.#.#.#..#..#..##....#...#
|
||||||
|
#......##.....##..##.##...#....
|
||||||
|
#.....#.....#.#........#.......
|
||||||
|
.#.....#.................#....#
|
||||||
|
.###....#...#............#.#.#.
|
||||||
|
.#...#.#......#.#..............
|
||||||
|
....#...#......#.....#.......#.
|
||||||
|
........#.....#..........#....#
|
||||||
|
#..#......#...#...#.........#..
|
||||||
|
#....#......#...##.#...#...#...
|
||||||
|
#...#....#....#..#..#.....#..#.
|
||||||
|
#......##..#..#.#.#..#.#.......
|
||||||
|
..#..#...............#...##...#
|
||||||
|
............#..............#.##
|
||||||
|
.#.#.#......##.......#.......#.
|
||||||
|
....#.........##.......#...###.
|
||||||
|
.......#.#...#.#.#.......#.....
|
||||||
|
....#..#..#...#....#.##.#.##...
|
||||||
|
...##.##.#...#......#..........
|
||||||
|
#.....#...#.#...#.##..##.#.....
|
||||||
|
.......#.....#...#.#...##.#....
|
||||||
|
.#.............#.....#....##..#
|
||||||
|
##......#.......#...#....#.....
|
||||||
|
.###......#.................#..
|
||||||
|
#.#......##.........##..#......
|
||||||
|
...#....#..........#.#.........
|
||||||
|
..##..#.........#..............
|
||||||
|
.....#...#..................#.#
|
||||||
|
.............#.........#...#..#
|
||||||
|
....#....#......#.#.......#...#
|
||||||
|
#..#............#.#.......#...#
|
||||||
|
..#.....#............#.........
|
||||||
|
.#.....................###....#
|
||||||
|
........#.####.........#.#.#...
|
||||||
|
#...........##...#.........#..#
|
||||||
|
...........#..#......#...#.#...
|
||||||
|
....##...##.....#.....#........
|
||||||
11
2020/samples/03.txt
Normal file
11
2020/samples/03.txt
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
..##.......
|
||||||
|
#...#...#..
|
||||||
|
.#....#..#.
|
||||||
|
..#.#...#.#
|
||||||
|
.#...##..#.
|
||||||
|
..#.##.....
|
||||||
|
.#.#.#....#
|
||||||
|
.#........#
|
||||||
|
#.##...#...
|
||||||
|
#...##....#
|
||||||
|
.#..#...#.#
|
||||||
@@ -34,6 +34,30 @@ where
|
|||||||
buf.trim().parse().unwrap()
|
buf.trim().parse().unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn read_char_grid(input: &mut dyn Read) -> Vec<Vec<u8>> {
|
||||||
|
let mut reader = BufReader::new(input);
|
||||||
|
let mut buffer = Vec::new();
|
||||||
|
|
||||||
|
let mut grid = Vec::new();
|
||||||
|
|
||||||
|
while let Ok(read) = reader.read_until(b'\n', &mut buffer) {
|
||||||
|
if read == 0 {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
let line: &[u8] = if let Some(&b'\n') = buffer.last() {
|
||||||
|
&buffer[..(buffer.len() - 1)]
|
||||||
|
} else {
|
||||||
|
&buffer[..]
|
||||||
|
};
|
||||||
|
|
||||||
|
grid.push(line.to_owned());
|
||||||
|
buffer.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
grid
|
||||||
|
}
|
||||||
|
|
||||||
/// An interface to count elements in particular categories.
|
/// An interface to count elements in particular categories.
|
||||||
pub trait GroupingCount {
|
pub trait GroupingCount {
|
||||||
/// The type of the categories under inspection
|
/// The type of the categories under inspection
|
||||||
|
|||||||
60
2020/src/day03.rs
Normal file
60
2020/src/day03.rs
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
use std::io::Read;
|
||||||
|
|
||||||
|
use crate::common::read_char_grid;
|
||||||
|
use crate::Solution;
|
||||||
|
|
||||||
|
#[derive(Default)]
|
||||||
|
pub struct Day03;
|
||||||
|
|
||||||
|
fn walk(right: usize, down: usize, forrest: &[Vec<u8>]) -> usize {
|
||||||
|
let mut trees = 0;
|
||||||
|
let mut x = 0;
|
||||||
|
|
||||||
|
for line in forrest.iter().step_by(down) {
|
||||||
|
if line[x] == b'#' {
|
||||||
|
trees += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
x = (x + right) % line.len();
|
||||||
|
}
|
||||||
|
|
||||||
|
trees
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Solution for Day03 {
|
||||||
|
fn part1(&mut self, input: &mut dyn Read) -> String {
|
||||||
|
let forrest = read_char_grid(input);
|
||||||
|
|
||||||
|
walk(3, 1, &forrest).to_string()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(&mut self, input: &mut dyn Read) -> String {
|
||||||
|
let forrest = read_char_grid(input);
|
||||||
|
let mut product = 1;
|
||||||
|
|
||||||
|
for &(right, down) in &[(1, 1), (3, 1), (5, 1), (7, 1), (1, 2)] {
|
||||||
|
product *= walk(right, down, &forrest);
|
||||||
|
}
|
||||||
|
|
||||||
|
product.to_string()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use crate::test_implementation;
|
||||||
|
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
const SAMPLE: &[u8] = include_bytes!("../samples/03.txt");
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn sample_part1() {
|
||||||
|
test_implementation!(Day03, 1, SAMPLE, 7);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn sample_part2() {
|
||||||
|
test_implementation!(Day03, 2, SAMPLE, 336);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,6 +17,7 @@ pub fn get_implementation(day: usize) -> Box<dyn Solution> {
|
|||||||
match day {
|
match day {
|
||||||
1 => Box::new(day01::Day01::default()),
|
1 => Box::new(day01::Day01::default()),
|
||||||
2 => Box::new(day02::Day02::default()),
|
2 => Box::new(day02::Day02::default()),
|
||||||
|
3 => Box::new(day03::Day03::default()),
|
||||||
_ => panic!("Unsupported day {}", day),
|
_ => panic!("Unsupported day {}", day),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user