static DAY: u8 = 2; fn main() { let input = advent::read_lines(DAY); println!("{DAY}a: {}", safe_reports(&input)); println!("{DAY}b: {}", 0); } fn is_report_safe(report: &[i32]) -> bool { let increasing = report[1] - report[0] > 0; for number in report.iter().as_slice().windows(2) { let diff = number[1] - number[0]; if diff.abs() < 1 || diff.abs() > 3 { return false; } if (diff > 0) != increasing { return false; } } true } fn safe_reports(input: &[String]) -> usize { let mut reports = Vec::new(); for line in input { let numbers = line.split(" ") .map(|x| x.parse::().unwrap()) .collect::>(); reports.push(numbers); } reports.iter() .filter(|x| is_report_safe(x)) .count() } #[cfg(test)] mod tests { use super::*; #[test] fn test() { let input = [ "7 6 4 2 1", "1 2 7 8 9", "9 7 6 2 1", "1 3 2 4 5", "8 6 4 4 1", "1 3 6 7 9", ].iter().map(|&x| String::from(x)).collect::>(); assert_eq!(safe_reports(&input), 2); } }