diff --git a/rs/src/y2022/d04.rs b/rs/src/y2022/d04.rs index 2b6c989..ebf1cb4 100644 --- a/rs/src/y2022/d04.rs +++ b/rs/src/y2022/d04.rs @@ -1,26 +1,29 @@ +fn int(str: &str) -> u32 { + str.parse().unwrap() +} + pub fn solve(input: String) { let pairs = input .lines() .map(|l| { - let mut ranges = l.split(',').map(|p| { - let mut numbers = p.split('-').map(|n| n.parse::().unwrap()); - (numbers.next().unwrap(), numbers.next().unwrap()) - }); - (ranges.next().unwrap(), ranges.next().unwrap()) + let (r1, r2) = l.split_once(',').unwrap(); + let (s1, e1) = r1.split_once('-').unwrap(); + let (s2, e2) = r2.split_once('-').unwrap(); + (int(s1), int(e1), int(s2), int(e2)) }) .collect::>(); // Part 1 let score = pairs .iter() - .filter(|((s1, e1), (s2, e2))| (s1 <= s2 && e2 <= e1) || (s2 <= s1 && e1 <= e2)) + .filter(|(s1, e1, s2, e2)| (s1 <= s2 && e2 <= e1) || (s2 <= s1 && e1 <= e2)) .count(); println!("Part 1: {score}"); // Part 2 let score = pairs .iter() - .filter(|((s1, e1), (s2, e2))| s1 <= e2 && s2 <= e1) + .filter(|(s1, e1, s2, e2)| s1 <= e2 && s2 <= e1) .count(); println!("Part 2: {score}"); }