From d88a896b5fa0edf12bca751f5e5a285ffbb1e9d7 Mon Sep 17 00:00:00 2001 From: Irene Knapp Date: Wed, 2 Dec 2020 21:33:54 -0800 Subject: Day 3 --- 03/src/main.rs | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 03/src/main.rs (limited to '03/src/main.rs') diff --git a/03/src/main.rs b/03/src/main.rs new file mode 100644 index 0000000..b8621da --- /dev/null +++ b/03/src/main.rs @@ -0,0 +1,67 @@ +use advent_lib::prelude::*; + + +fn main() -> Result<()> { + let mut args = std::env::args(); + if args.len() != 2 { + eprintln!("Usage: advent input"); + } + let _ = args.next(); + let filename = args.next().unwrap(); + + let input = advent_lib::read_lines_file(&filename)?; + + let mut trees: Vec> = Vec::new(); + + for line in &input { + let mut tree_line: Vec = Vec::new(); + + for c in line.trim().chars() { + if c == '#' { + tree_line.push(true); + } else { + tree_line.push(false); + } + } + + trees.push(tree_line); + } + + let mut product = 1; + product *= check_slope(&trees, 1, 1); + product *= check_slope(&trees, 3, 1); + product *= check_slope(&trees, 5, 1); + product *= check_slope(&trees, 7, 1); + product *= check_slope(&trees, 1, 2); + + println!("product: {}", product); + + Ok(()) +} + + +fn check_slope(trees: &Vec>, dx: usize, dy: usize) -> usize { + let mut x = 0; + let mut y = 0; + let mut trees_hit = 0; + loop { + let x_adjusted = x % trees[y].len(); + let is_tree = trees[y][x_adjusted]; + + if is_tree { + trees_hit += 1; + } + + x += dx; + y += dy; + + if y >= trees.len() { + break; + } + } + + println!("dx: {}, dy: {}, trees: {}", dx, dy, trees_hit); + + trees_hit +} + -- cgit 1.4.1