Day 3
This commit is contained in:
parent
dd6c5aa5c7
commit
0bb5d960e5
2 changed files with 55 additions and 0 deletions
54
src/day3.rs
Normal file
54
src/day3.rs
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
use aoc_runner_derive::{aoc,aoc_generator};
|
||||||
|
pub struct Forest {
|
||||||
|
slice: Vec<Vec<bool>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Forest {
|
||||||
|
fn get(&self, x: usize,y: usize) -> Option<bool> {
|
||||||
|
self.slice.get(y).map(|line| line.get(x%line.len())).flatten().cloned()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[aoc_generator(day3)]
|
||||||
|
pub fn input_generator(input: &str) -> Forest {
|
||||||
|
let slice=input.lines().map(|l| l.chars().map(|c| c=='#').collect()).collect();
|
||||||
|
Forest{
|
||||||
|
slice
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[aoc(day3,part1)]
|
||||||
|
pub fn solve_part1(input: &Forest) -> usize {
|
||||||
|
let mut sum: usize=0;
|
||||||
|
let dx=3;
|
||||||
|
let dy=1;
|
||||||
|
let mut pos=(0,0);
|
||||||
|
while let Some(tree) = input.get(pos.0,pos.1) {
|
||||||
|
if tree {
|
||||||
|
sum+=1;
|
||||||
|
}
|
||||||
|
pos.0+=dx;
|
||||||
|
pos.1+=dy;
|
||||||
|
};
|
||||||
|
sum
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#[aoc(day3,part2)]
|
||||||
|
pub fn solve_part2(input: &Forest) -> usize {
|
||||||
|
let mut prod: usize = 1;
|
||||||
|
for (dx,dy) in &[(1,1),(3,1),(5,1),(7,1),(1,2)] {
|
||||||
|
let mut sum: usize=0;
|
||||||
|
let mut pos=(0,0);
|
||||||
|
while let Some(tree) = input.get(pos.0,pos.1) {
|
||||||
|
if tree {
|
||||||
|
sum+=1;
|
||||||
|
}
|
||||||
|
pos.0+=dx;
|
||||||
|
pos.1+=dy;
|
||||||
|
};
|
||||||
|
prod*=sum;
|
||||||
|
}
|
||||||
|
prod
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
use aoc_runner_derive::aoc_lib;
|
use aoc_runner_derive::aoc_lib;
|
||||||
pub mod day1;
|
pub mod day1;
|
||||||
pub mod day2;
|
pub mod day2;
|
||||||
|
pub mod day3;
|
||||||
aoc_lib! { year = 2020 }
|
aoc_lib! { year = 2020 }
|
Loading…
Reference in a new issue