pub fn run(input: Vec) { // Convert inputs to unsigned integer numbers let input: Vec = input .into_iter() .map(|s| { s.parse() .expect("All lines are required to be unsigned integers") }) .collect(); part1(&input); part2(&input); } fn part1(input: &[u32]) { let mut last_depth = u32::MAX; let num_down_slopes = input .iter() .filter(|&depth| { let going_deeper = *depth > last_depth; last_depth = *depth; going_deeper }) .count(); println!("Solution to part 1: {}", num_down_slopes); } fn part2(input: &[u32]) { let mut last_aliased_depth = u32::MAX; let num_aliased_down_slopes = input .windows(3) .filter(|&depths| { let aliased_depth: u32 = depths.iter().sum(); let going_deeper = aliased_depth > last_aliased_depth; last_aliased_depth = aliased_depth; going_deeper }) .count(); println!("Solution to part 2: {}", num_aliased_down_slopes); }