[TASK] Solved day 3
This commit is contained in:
323
input/day3.txt
Normal file
323
input/day3.txt
Normal file
@@ -0,0 +1,323 @@
|
|||||||
|
......##....#...#..#.#....#....
|
||||||
|
.......#...#..#..#....##.......
|
||||||
|
#.#...#........###.#.##..#.....
|
||||||
|
.......#.....##.#..##...##.##..
|
||||||
|
.#...#.#...##..........#..#....
|
||||||
|
#.......##.....###.#...#......#
|
||||||
|
.........#....#.#.......#..#...
|
||||||
|
..#.......####.......###..##...
|
||||||
|
.#.#.##..#.#...##..#...###...##
|
||||||
|
...................#...........
|
||||||
|
....#.#.......#..........#.#..#
|
||||||
|
..#.#...........####.#.......#.
|
||||||
|
.....#.##..#..##..#.#...#......
|
||||||
|
#.##...###..#................##
|
||||||
|
...#...#...#..##.#............#
|
||||||
|
#.##....##....#........#..#....
|
||||||
|
..#......#.#.....##.......#....
|
||||||
|
.......#......#....#......#....
|
||||||
|
.#........##.....#.#...#...#.#.
|
||||||
|
..........##.#...#..#..........
|
||||||
|
#####..##......#.....#......#.#
|
||||||
|
......#...............##...#...
|
||||||
|
..#.#.##..#...#.#........#...#.
|
||||||
|
..........#......#..........###
|
||||||
|
..#...##.##..##..........#.....
|
||||||
|
........#.##.#.....#..#...#....
|
||||||
|
#.....#.........#..............
|
||||||
|
..........##.##....#..#..#.....
|
||||||
|
..#...........#.......#........
|
||||||
|
........#..#.....#.#.#...#.....
|
||||||
|
#.......##.....#.....#...#.##..
|
||||||
|
###.#.#....#..#.....#........#.
|
||||||
|
..#..#..#..........#....#....#.
|
||||||
|
..#...##...#.#.##.....#..#.....
|
||||||
|
...#....###...........##.#.....
|
||||||
|
.##.................##.#.......
|
||||||
|
........#...#.##..#...#........
|
||||||
|
.##..#............##..........#
|
||||||
|
............###.#....#..#......
|
||||||
|
.....##....#.....#......#.....#
|
||||||
|
....#.....#.##.......#...#.#...
|
||||||
|
.##.#......#.........#...##....
|
||||||
|
..##......#......#...........#.
|
||||||
|
.......#.#.............#.......
|
||||||
|
.##.#...#..##....##.......#....
|
||||||
|
...#......##.#.#......#.....###
|
||||||
|
#.#....#.......#.#......#....#.
|
||||||
|
#......#.#.....#...........#..#
|
||||||
|
##.#..##...#........#.##.#....#
|
||||||
|
.....#........#........#...#...
|
||||||
|
...............#.......#..#....
|
||||||
|
.#.#.#..#.#...#.......#.....##.
|
||||||
|
.#.#.............#..#....#.....
|
||||||
|
....#.......#..##.........###..
|
||||||
|
.#.....#.#....#..#..#....#.....
|
||||||
|
........#......#.....#.#....#..
|
||||||
|
##......#....##.....#.#..#.#...
|
||||||
|
.#...#..#.##.#.##.##.....#.....
|
||||||
|
#...#....#.........##.#....#...
|
||||||
|
.........##..#.....#..#...#.#..
|
||||||
|
.#............#..........#.#...
|
||||||
|
...........#.....#......#.#....
|
||||||
|
#...#...#.....#..#....#........
|
||||||
|
#..##.....#..#.......#....#...#
|
||||||
|
#..#..#..........#......#...#..
|
||||||
|
...#...#.#.##.#...#....#...##..
|
||||||
|
......##....##....#....##..####
|
||||||
|
...###.#..#....#.......#.......
|
||||||
|
#.........##......#...#........
|
||||||
|
..........#....#.......#.......
|
||||||
|
#....##................##....##
|
||||||
|
.........#....#.#.......##.#...
|
||||||
|
.....#......###.......#..#...##
|
||||||
|
###.....#..##....###...........
|
||||||
|
.....#...#....#.....##......###
|
||||||
|
.#..#...#......##........##..#.
|
||||||
|
#.#.#.#....#.............#.....
|
||||||
|
......#.....##.#....#..##...#..
|
||||||
|
..#............#.#....#..#...#.
|
||||||
|
.............#.#...##.......#..
|
||||||
|
...#....#.##.#...#.#..##...###.
|
||||||
|
...#..............#.......#....
|
||||||
|
......###.#............#.....#.
|
||||||
|
.##...###..#.####...#..........
|
||||||
|
...#..#...#.#.#..#......#..#...
|
||||||
|
.#....##.###....#........#.....
|
||||||
|
..#..#....#.........##.........
|
||||||
|
..........##.###........#.#...#
|
||||||
|
.........#...#..#........#.....
|
||||||
|
.......#.....#...###...........
|
||||||
|
.....#.#..##......#...#...#....
|
||||||
|
.....#....#..#........##.#..#..
|
||||||
|
...#...........#............#..
|
||||||
|
##.....#....#.#...#...#....##..
|
||||||
|
...#.....#.....#...##...#...#..
|
||||||
|
...##.#..........##...#.#.##.#.
|
||||||
|
....#.#.##.......#.#...#......#
|
||||||
|
......###...#....#.##........#.
|
||||||
|
.....#.........#...#...#..#..##
|
||||||
|
.........#................#....
|
||||||
|
.##..###..................#.#.#
|
||||||
|
.##...........#...........#....
|
||||||
|
#...#........#.....#..#...##...
|
||||||
|
.....#..#...#.........#.......#
|
||||||
|
..#..............#......#......
|
||||||
|
#....#...............#.#.......
|
||||||
|
...#........#.#....#..#.###.##.
|
||||||
|
.......#..##..#...#..#...###...
|
||||||
|
..........##..#.......##.##....
|
||||||
|
##.#..#.#...##..........#......
|
||||||
|
.#.##.#...##.....#....#....#.##
|
||||||
|
...#.#......#...#.##..##.......
|
||||||
|
##.......#.#......#....##..#.#.
|
||||||
|
...#..#.##.........#...#.....#.
|
||||||
|
.##.##..##...#........#..#.....
|
||||||
|
.#.##.............#.#.#.....#..
|
||||||
|
.......#.....................#.
|
||||||
|
......#...#....#..#..........#.
|
||||||
|
..#..#....#.#................#.
|
||||||
|
..#.....#..#.#......#......###.
|
||||||
|
...#...##..##....#..#...###.#..
|
||||||
|
...#.....#............##......#
|
||||||
|
.......#.#.#......#.....###....
|
||||||
|
.....#......#.....#.........#.#
|
||||||
|
#...#.#...#..#...#..#....#.....
|
||||||
|
#..##...#..##.............#..#.
|
||||||
|
##....##.......#.#.......#..#.#
|
||||||
|
..............#...#..#......#..
|
||||||
|
..#...#...#.#...#.#............
|
||||||
|
#..........#...#.............#.
|
||||||
|
..........##......#........#...
|
||||||
|
#...#...#....#.#...........#...
|
||||||
|
..#.#.#...##......#.#...#.#..#.
|
||||||
|
.......#.......#.............#.
|
||||||
|
.#..........#..................
|
||||||
|
..##...#......#..........#....#
|
||||||
|
.#..##..........#...#..........
|
||||||
|
...#....#..#.#.....##..##.#..#.
|
||||||
|
...#...#...#..#....##..#....#..
|
||||||
|
..............#.#.....#......##
|
||||||
|
..............####....#.#..#...
|
||||||
|
.#........##....#...#.#...#..#.
|
||||||
|
.#..##.###....#.#.....##..#....
|
||||||
|
...###.#.........#..#..#.##.#..
|
||||||
|
.....#..#.....#..#...##......##
|
||||||
|
.#.#.##.............#...##.....
|
||||||
|
....##........#........#.......
|
||||||
|
.......#.....###..............#
|
||||||
|
#.##.......##....#.#.....#.#...
|
||||||
|
........#....#............#..##
|
||||||
|
...#.#..#.......#..........#...
|
||||||
|
..##....#..##......###.#.....#.
|
||||||
|
.#..#.#.##....#.......#........
|
||||||
|
........#.####.#.......#.##....
|
||||||
|
..........##...............#...
|
||||||
|
.#..#.....#....##..#..##...#..#
|
||||||
|
....#.#.....#.#.........#####..
|
||||||
|
...#.##....#...###.##.#..#.....
|
||||||
|
.#...........#.............##.#
|
||||||
|
..#....#....####.....#.#....#..
|
||||||
|
......##.......#....#..#.......
|
||||||
|
.####...##.#.#..#.####.#.#.....
|
||||||
|
###.........#..#.#.#.#........#
|
||||||
|
...#...#..#.............#.##...
|
||||||
|
.........#....#......#.....#.#.
|
||||||
|
...#....#......#..#......#....#
|
||||||
|
..#...#..........##..##........
|
||||||
|
.....##........#......#.....#..
|
||||||
|
...#....#....#....#..#....#....
|
||||||
|
##...#...........##............
|
||||||
|
.......#..##..#.......##.#.....
|
||||||
|
...............#.##.....#......
|
||||||
|
#.#....##.#.....#...#..........
|
||||||
|
........#......#...#......#.#.#
|
||||||
|
..#..#.....#.#........#........
|
||||||
|
..####.....##.#.##.......#.#.#.
|
||||||
|
.#.##.#.......##......#.....#..
|
||||||
|
....#.....##.........#.....#...
|
||||||
|
.#.#...###.#.#..........#....#.
|
||||||
|
.........##.#.#.....#..#.......
|
||||||
|
......#..#...#..#..###.#.#.....
|
||||||
|
.....#...#.#..#.#.......#.#...#
|
||||||
|
......##........#..#...#......#
|
||||||
|
#..##...#...#..#.....#..#..#..#
|
||||||
|
......#....#...........#.#.....
|
||||||
|
...#.......#...............#...
|
||||||
|
#.........#......#.............
|
||||||
|
..###..................#......#
|
||||||
|
#.....#.#.#.......##....#......
|
||||||
|
.........#...........#....#.#..
|
||||||
|
.###....##.##..##.............#
|
||||||
|
.##.#......#...#...##..........
|
||||||
|
....#........###......#.#......
|
||||||
|
...........#..#.##.#...........
|
||||||
|
.#..#.......#......#.#####.....
|
||||||
|
....##....##......#....#...#...
|
||||||
|
.......#..#.....#.#...###...#.#
|
||||||
|
..##.....#.......#.#.#..#.....#
|
||||||
|
.#...#............#....##...#..
|
||||||
|
.#..#...##.......#.............
|
||||||
|
..##.......#...........#.#....#
|
||||||
|
...#.#...#....#..#.....#.......
|
||||||
|
...#........#...##...#.#..#.#..
|
||||||
|
#........#..........#..........
|
||||||
|
......#......#.........#.......
|
||||||
|
...##...#.....#.......#...#.##.
|
||||||
|
......##..##......#..###..#....
|
||||||
|
....##....#..###.#.....##......
|
||||||
|
##.##..#.....#..#..............
|
||||||
|
..#.#..#....#....#....#.#...#.#
|
||||||
|
.#.....##.#.##.#..#.#..........
|
||||||
|
...#......##.#...##..##...#....
|
||||||
|
.###.....#......#.......#.....#
|
||||||
|
....##.......#.....#..#....#...
|
||||||
|
..........#..##....#..##.#....#
|
||||||
|
...#....#..##.#........#.#.#...
|
||||||
|
...#.#...#....#.......#..##.#.#
|
||||||
|
#..#..........#.#...#....#.....
|
||||||
|
#..#...........................
|
||||||
|
........#.....#.....#.#...#.#..
|
||||||
|
#...#..#...#..........###...#.#
|
||||||
|
.....##.#..##.#.#.#.##....#....
|
||||||
|
#.......#....#.#..#..#..#.#....
|
||||||
|
..###.#.......#.#.##...........
|
||||||
|
#....#..#..........#.##..#.#...
|
||||||
|
..#..#........##....#..##......
|
||||||
|
#...##..#.........#.#....#.#...
|
||||||
|
##..###..##...#.........#.#...#
|
||||||
|
###..#....#..##...#.#..#.#.....
|
||||||
|
.#.##.#......#............#....
|
||||||
|
.#...#.##.#.........##.........
|
||||||
|
##.....###.....#........#..#...
|
||||||
|
...........##.#................
|
||||||
|
.#......###......#....#..####..
|
||||||
|
#...##.....#.....#..##....#.#..
|
||||||
|
..#....#.......#.#.#......#...#
|
||||||
|
#.....#........#....#.#...#....
|
||||||
|
..##...............#....#..###.
|
||||||
|
.#....#.......#..#...#.........
|
||||||
|
.##.#..#..#...#..#..#....#....#
|
||||||
|
.......#.#....#.....##...#.....
|
||||||
|
.#....#.#.#...........#........
|
||||||
|
.........#..##..#..#...#.......
|
||||||
|
##..##...#......#.....#........
|
||||||
|
#...........#.....#..###......#
|
||||||
|
.#...........#....#...#...##.#.
|
||||||
|
..............##.###.#.#####.##
|
||||||
|
........#.#...#.............##.
|
||||||
|
#...................###..#.##..
|
||||||
|
#.....#...##...................
|
||||||
|
.....##..........#..#.#........
|
||||||
|
.#....##.#....#....###....#...#
|
||||||
|
.......#.#...........#.#.....#.
|
||||||
|
......#........###...#...##....
|
||||||
|
.##..........#..#..#...........
|
||||||
|
....#.......#..#.....##.#..#...
|
||||||
|
..#.##......#..#.....#..#......
|
||||||
|
......#...#..##....#.#..#..#.#.
|
||||||
|
#.........................#...#
|
||||||
|
###.#.......#......##....#..#..
|
||||||
|
..##.###.#...#.............#...
|
||||||
|
.....#...#...#......#....#####.
|
||||||
|
#..........#.#.##.#.#.....#..#.
|
||||||
|
....#.........#...#.#.........#
|
||||||
|
#.##.........#...#...#.####..##
|
||||||
|
.##.................#..........
|
||||||
|
##.....#............#..#.#.....
|
||||||
|
#.#...#.#........#........#...#
|
||||||
|
.#...........#....#..#.......#.
|
||||||
|
.#.......#..........##..#.##..#
|
||||||
|
.#..##....#..##......#.#..##...
|
||||||
|
#......#............#.......#.#
|
||||||
|
.##...............#...#...#....
|
||||||
|
.......##.#..#..##.....#.......
|
||||||
|
...#.......#..###.....#....#...
|
||||||
|
......#............#...........
|
||||||
|
####............#.........#.##.
|
||||||
|
#......#.#..#...#.....#..#.....
|
||||||
|
...........#...#..##.......####
|
||||||
|
#.#...##..#....#.#.........#.#.
|
||||||
|
...#....#..#.......#.........#.
|
||||||
|
.........#.#.#...#....#........
|
||||||
|
.#.....#........#..#.........#.
|
||||||
|
....#....#..#.....#...#........
|
||||||
|
..#....#.#.....#..##...........
|
||||||
|
.#...#..#..#.##.###....#.......
|
||||||
|
#......##.......##..##.........
|
||||||
|
...#.........#.......##.#......
|
||||||
|
.#...#...#.......#........##...
|
||||||
|
..#.............#.......#.....#
|
||||||
|
..#...........#.#.#...#.......#
|
||||||
|
.....##..#....#..............#.
|
||||||
|
#.#.....#.#....................
|
||||||
|
.....#..##..#...#.....#........
|
||||||
|
..#.......#..####..#....#.##.#.
|
||||||
|
#....#.....#.....#...#......#..
|
||||||
|
..#....##...#....#..#..#.....#.
|
||||||
|
..#.####..............##.......
|
||||||
|
.#.........#..#...#.......##...
|
||||||
|
#....#.#........#....#...#...##
|
||||||
|
.....#..#....#.#..#...#.#.##...
|
||||||
|
.##.................#...##.....
|
||||||
|
.##.##.##...#...........#...##.
|
||||||
|
..#....#..#.....#..#......##...
|
||||||
|
.#...........#......#....#..#.#
|
||||||
|
.#.#............#..#..#...#....
|
||||||
|
....#......#.....#.#.#.....#...
|
||||||
|
#.......##.............#.......
|
||||||
|
....#....................#.#...
|
||||||
|
......#........#..#.#.....#.#..
|
||||||
|
.....#..#....#.#........#....#.
|
||||||
|
...##.........#...#.##....#..#.
|
||||||
|
.#....#..#...#.#.#......#......
|
||||||
|
#......#.#.##.#..#..#.....##...
|
||||||
|
......#....#.#...#..#.#........
|
||||||
|
..#.....##.....#...#.#.......#.
|
||||||
|
......#.#.....#........#.......
|
||||||
|
......#.#.#...#..#.#.#.#.......
|
||||||
|
..#.#.##..#..#..#.#.##...#.....
|
||||||
|
......#.#.#......#.....#...#...
|
||||||
|
.....#.##....#..##...#...#....#
|
||||||
|
..#.....#...........#..#..##...
|
||||||
|
..#..#.......#....#....###.#...
|
||||||
11
input/day3_example.txt
Normal file
11
input/day3_example.txt
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
..##.......
|
||||||
|
#...#...#..
|
||||||
|
.#....#..#.
|
||||||
|
..#.#...#.#
|
||||||
|
.#...##..#.
|
||||||
|
..#.##.....
|
||||||
|
.#.#.#....#
|
||||||
|
.#........#
|
||||||
|
#.##...#...
|
||||||
|
#...##....#
|
||||||
|
.#..#...#.#
|
||||||
52
src/day3.rs
Normal file
52
src/day3.rs
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
use super::util;
|
||||||
|
|
||||||
|
pub fn solve() {
|
||||||
|
let lines = util::read_file("input/day3.txt");
|
||||||
|
let forest = Forest {
|
||||||
|
map: lines.iter().flat_map(|l| l.chars().map(|c| c == '#')).collect(),
|
||||||
|
width: lines.iter().next().unwrap().len(),
|
||||||
|
height: lines.len()
|
||||||
|
};
|
||||||
|
|
||||||
|
let angle = Angle { x: 3, y: 1 };
|
||||||
|
println!("Day 3 Part 1: {}", forest.trees_on_angle(&angle));
|
||||||
|
|
||||||
|
let angles = [ Angle {x: 1, y: 1}, Angle {x: 3, y: 1}, Angle {x: 5, y: 1}, Angle {x: 7, y: 1}, Angle{x: 1, y: 2}];
|
||||||
|
let part2 = angles.iter().map(|a| forest.trees_on_angle(a)).fold(1, |res, cur| res * cur);
|
||||||
|
|
||||||
|
println!("Day 3 Part 2: {}", part2);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Forest {
|
||||||
|
map: Vec<bool>,
|
||||||
|
width: usize,
|
||||||
|
height: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Angle {
|
||||||
|
x: usize,
|
||||||
|
y: usize
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Forest {
|
||||||
|
|
||||||
|
fn is_tree(&self, x: usize, y: usize) -> bool {
|
||||||
|
|
||||||
|
if y >= self.height {
|
||||||
|
panic!("Invalid coordinate!");
|
||||||
|
}
|
||||||
|
|
||||||
|
return self.map[(x % self.width) + y * self.width];
|
||||||
|
}
|
||||||
|
|
||||||
|
fn trees_on_angle(&self, angle: &Angle) -> u32 {
|
||||||
|
let mut res = 0;
|
||||||
|
for i in 0..(self.height / angle.y) {
|
||||||
|
|
||||||
|
if self.is_tree(angle.x * i, angle.y * i) {
|
||||||
|
res += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ use std::time::Instant;
|
|||||||
mod util;
|
mod util;
|
||||||
mod day1;
|
mod day1;
|
||||||
mod day2;
|
mod day2;
|
||||||
|
mod day3;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
|
||||||
@@ -16,12 +17,14 @@ fn main() {
|
|||||||
match args[day_arg_idx.unwrap() + 1].parse::<u8>().unwrap() {
|
match args[day_arg_idx.unwrap() + 1].parse::<u8>().unwrap() {
|
||||||
1 => day1::solve(),
|
1 => day1::solve(),
|
||||||
2 => day2::solve(),
|
2 => day2::solve(),
|
||||||
|
3 => day3::solve(),
|
||||||
_ => println!("This day is not yet implemented")
|
_ => println!("This day is not yet implemented")
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Solve all days:
|
// Solve all days:
|
||||||
day1::solve();
|
day1::solve();
|
||||||
day2::solve();
|
day2::solve();
|
||||||
|
day3::solve();
|
||||||
}
|
}
|
||||||
|
|
||||||
println!("Execution took {} μs", now.elapsed().as_micros());
|
println!("Execution took {} μs", now.elapsed().as_micros());
|
||||||
|
|||||||
Reference in New Issue
Block a user