problem 3
This commit is contained in:
19
src/main.rs
19
src/main.rs
@@ -1,11 +1,13 @@
|
|||||||
extern crate reqwest;
|
extern crate reqwest;
|
||||||
extern crate tempfile;
|
extern crate tempfile;
|
||||||
|
|
||||||
use crate::problem1::part1::Problem1;
|
use crate::problem1::lib::Problem1;
|
||||||
use crate::problem2::part2::Problem2;
|
use crate::problem2::lib::Problem2;
|
||||||
|
use crate::problem3::lib::Problem3;
|
||||||
|
|
||||||
mod problem1;
|
mod problem1;
|
||||||
mod problem2;
|
mod problem2;
|
||||||
|
mod problem3;
|
||||||
mod util;
|
mod util;
|
||||||
|
|
||||||
|
|
||||||
@@ -23,7 +25,12 @@ fn main() {
|
|||||||
// problem1.run_part1();
|
// problem1.run_part1();
|
||||||
// problem1.run_part2();
|
// problem1.run_part2();
|
||||||
|
|
||||||
let problem2 = Problem2::new(&util::get_problem(2));
|
//let problem2 = Problem2::new(&util::get_problem(2));
|
||||||
problem2.run_part1();
|
//problem2.run_part1();
|
||||||
problem2.run_part2();
|
//problem2.run_part2();
|
||||||
}
|
|
||||||
|
let problem3 = Problem3::new(&util::get_problem(3));
|
||||||
|
problem3.run_part1();
|
||||||
|
problem3.run_part2();
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
pub mod part1;
|
pub mod lib;
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
pub mod part2;
|
pub mod lib;
|
||||||
|
|||||||
75
src/problem3/lib.rs
Normal file
75
src/problem3/lib.rs
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
/*
|
||||||
|
Starting at the top-left corner of your map and following a slope of right 3 and down 1, how many trees would you encounter?
|
||||||
|
*/
|
||||||
|
|
||||||
|
use crate::Problem;
|
||||||
|
|
||||||
|
pub struct Problem3 {
|
||||||
|
map: Vec<Vec<i32>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Problem3 {
|
||||||
|
fn get_tile(&self, x: i32, y: i32) -> i32 {
|
||||||
|
let dim_y = self.map.len() as i32;
|
||||||
|
let dim_x = self.map.get(0).unwrap().len() as i32;
|
||||||
|
|
||||||
|
let ind_x = (x % dim_x) as usize;
|
||||||
|
let ind_y = (y % dim_y) as usize;
|
||||||
|
|
||||||
|
*self.map.get(ind_y).unwrap().get(ind_x).unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn traverse(&self, dx: i32, dy: i32) -> i64 {
|
||||||
|
let mut x = 0;
|
||||||
|
|
||||||
|
let mut count = 0;
|
||||||
|
|
||||||
|
for y in ((dy as usize)..self.map.len()).step_by(dy as usize) {
|
||||||
|
x += dx;
|
||||||
|
if self.get_tile(x as i32, y as i32) == 1 {
|
||||||
|
count += 1;
|
||||||
|
// println!("tree at {}, {}", x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
count as i64
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Problem for Problem3 {
|
||||||
|
fn new(input: &String) -> Self {
|
||||||
|
Problem3 {
|
||||||
|
map: input
|
||||||
|
.split("\n")
|
||||||
|
.filter_map(|s| {
|
||||||
|
let s = s.trim();
|
||||||
|
if !s.is_empty() {
|
||||||
|
let mut accum = Vec::new();
|
||||||
|
for i in s.chars() {
|
||||||
|
if i == '#' {
|
||||||
|
accum.push(1);
|
||||||
|
} else {
|
||||||
|
accum.push(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Some(accum)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}).collect(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn run_part1(&self) {
|
||||||
|
|
||||||
|
let v : i64 = self.traverse(1, 1) *
|
||||||
|
self.traverse(3, 1) *
|
||||||
|
self.traverse(5, 1) *
|
||||||
|
self.traverse(7, 1) *
|
||||||
|
self.traverse(1, 2);
|
||||||
|
println!("{}", v);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn run_part2(&self) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
1
src/problem3/mod.rs
Normal file
1
src/problem3/mod.rs
Normal file
@@ -0,0 +1 @@
|
|||||||
|
pub mod lib;
|
||||||
Reference in New Issue
Block a user