34 lines
920 B
Rust
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
|
|
} |