From 489edf3fca130c0be2513b23dc5cea4f5dec8493 Mon Sep 17 00:00:00 2001 From: alex <> Date: Mon, 2 Dec 2024 09:17:39 +0100 Subject: [PATCH] Day02 - part 2 --- src/day02.rs | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/day02.rs b/src/day02.rs index 71a3f8d..6037683 100644 --- a/src/day02.rs +++ b/src/day02.rs @@ -32,7 +32,38 @@ fn run_part2(input: &str) -> Result> { let filename = Path::new(filename).file_stem().unwrap().to_str().unwrap(); println!("Running {} - part 1", filename); - Ok(0) + fn is_sorted(level: &[u32]) -> bool { + (level.is_sorted_by(|a, b| a < b) || level.is_sorted_by(|a, b| b < a)) && + level.is_sorted_by(|a, b| a.abs_diff(*b) >= 1 && a.abs_diff(*b) <= 3) + } + + let levels = input.lines() + .map(|l| { + l.split(" ") + .map(|v| v.parse::().unwrap()) + .collect::>() + }); + + let mut res: u32 = 0; + + for level in levels { + if is_sorted(&level) { + res += 1; + } + else { + for i in 0..level.len() { + let l = level.clone(); + let (a, b) = l.split_at(i); + let l = [a, &b[1..]].concat(); + if is_sorted(&l) { + res += 1; + break; + } + } + } + } + + Ok(res) } #[cfg(test)] @@ -54,6 +85,6 @@ mod tests { #[test] fn test_part2() { - assert_eq!(0, run_part2(TEXT_INPUT).unwrap()); + assert_eq!(4, run_part2(TEXT_INPUT).unwrap()); } } -- 2.39.5