advent_of_code/src/aoc03/mod.rs

34 lines
920 B
Rust

use std::error::Error;
use std::fs;
pub fn both(filename: &str) -> Result<(), Box<dyn Error>> {
let contents = fs::read_to_string(filename)?;
let lines = contents.lines().collect();
let trees01 = calc_trees(&lines, 3, 1);
println!("Encountered {} trees while going down", trees01);
let trees02 = calc_trees(&lines, 1, 1) * trees01 * calc_trees(&lines, 5, 1) *
calc_trees(&lines, 7, 1) * calc_trees(&lines, 1, 2);
println!("Part 2: {}", trees02);
Ok(())
}
fn calc_trees(contents: &Vec<&str>, right: usize, down: usize) -> u64 {
let mut trees = 0;
for height in 0..contents.len() {
if height % down != 0 {
continue;
}
let x = height/down * right;
let row = contents[height].repeat( x / contents[height].len() + 1);
if row.as_bytes()[x] == "#".as_bytes()[0] {
trees += 1;
}
}
return trees
}