From fe405dd4778fece84c8eebd9e58b951cf34c0dcd Mon Sep 17 00:00:00 2001 From: Devon Sawatsky Date: Fri, 05 Dec 2025 05:34:54 +0000 Subject: [PATCH] day5 part2 --- src/day5.rs | 28 +++++++++++++++++++++++++++- src/lib.rs | 14 +++++++------- 2 file(s) changed, 34 insertion(s)(+), 8 deletion(s)(-) diff --git a/src/day5.rs b/src/day5.rs --- a/src/day5.rs +++ b/src/day5.rs @@ -10,7 +10,33 @@ } pub fn day5_part2(input: &str) -> String { - todo!() + let (mut ranges, _) = parse(input); + ranges.sort_by_key(|r| *r.start()); + let collapsed = collapse(&ranges); + let total_range = collapsed + .into_iter() + .fold(0, |acc, elem| acc + (elem.end() - elem.start() + 1)); + total_range.to_string() +} + +/// ranges must be sorted +fn collapse(ranges: &[RangeInclusive]) -> Vec> { + let mut collapsed = vec![]; + + let mut current_range = ranges[0].clone(); + for range in ranges { + if range.start() <= current_range.end() { + if range.end() > current_range.end() { + current_range = *current_range.start()..=*range.end() + } + } else { + collapsed.push(current_range); + current_range = range.clone(); + } + } + collapsed.push(current_range); + + collapsed } fn parse(input: &str) -> (Vec>, Vec) { diff --git a/src/lib.rs b/src/lib.rs --- a/src/lib.rs +++ b/src/lib.rs @@ -131,13 +131,13 @@ let result = day5::day5_part1(include_str!("../input/day5.txt")); assert_eq!(result, "885"); } - // #[test] - // fn day5_part2_test() { - // let test_result = day5::day5_part2(include_str!("../input/day5.test.txt")); - // assert_eq!(test_result, "43"); - // // let result = day5::day5_part2(include_str!("../input/day5.txt")); - // // assert_eq!(result, "7922"); - // } + #[test] + fn day5_part2_test() { + let test_result = day5::day5_part2(include_str!("../input/day5.test.txt")); + assert_eq!(test_result, "14"); + let result = day5::day5_part2(include_str!("../input/day5.txt")); + assert_eq!(result, "348115621205535"); + } #[test] fn day4_part1_test() { -- tangled.sh