From 70ff2ab3a79e43c1d66126f701d04692eaf6afe6 Mon Sep 17 00:00:00 2001 From: Joscha Date: Sun, 4 Dec 2022 13:05:24 +0100 Subject: [PATCH] [rs] Simplify 2022_04 --- rs/src/y2022/d04.rs | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/rs/src/y2022/d04.rs b/rs/src/y2022/d04.rs index 1aa7ad2..2b6c989 100644 --- a/rs/src/y2022/d04.rs +++ b/rs/src/y2022/d04.rs @@ -1,31 +1,26 @@ -use std::ops::RangeInclusive; - -fn contains(a: &RangeInclusive, b: &RangeInclusive) -> bool { - a.start() <= b.start() && b.end() <= a.end() -} - -fn overlap(a: &RangeInclusive, b: &RangeInclusive) -> bool { - a.contains(b.start()) || a.contains(b.end()) || b.contains(a.start()) || b.contains(a.end()) -} - 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() + (numbers.next().unwrap(), numbers.next().unwrap()) }); (ranges.next().unwrap(), ranges.next().unwrap()) }) .collect::>(); + // Part 1 let score = pairs .iter() - .filter(|(a, b)| contains(a, b) || contains(b, a)) + .filter(|((s1, e1), (s2, e2))| (s1 <= s2 && e2 <= e1) || (s2 <= s1 && e1 <= e2)) .count(); println!("Part 1: {score}"); - let score = pairs.iter().filter(|(a, b)| overlap(a, b)).count(); + // Part 2 + let score = pairs + .iter() + .filter(|((s1, e1), (s2, e2))| s1 <= e2 && s2 <= e1) + .count(); println!("Part 2: {score}"); }