From 5dbecaa72f58f299826c24488328118c98a09b37 Mon Sep 17 00:00:00 2001 From: Reiner Herrmann Date: Mon, 2 Dec 2024 18:28:06 +0100 Subject: day2 solution 1 --- src/bin/day2.rs | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/bin/day2.rs diff --git a/src/bin/day2.rs b/src/bin/day2.rs new file mode 100644 index 0000000..e34b8b0 --- /dev/null +++ b/src/bin/day2.rs @@ -0,0 +1,52 @@ +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); + } +} -- cgit v1.2.3