[rs] Simplify 2022_04

This commit is contained in:
Joscha 2022-12-04 13:05:24 +01:00
parent 7b89c13503
commit 70ff2ab3a7

View file

@ -1,31 +1,26 @@
use std::ops::RangeInclusive;
fn contains(a: &RangeInclusive<u32>, b: &RangeInclusive<u32>) -> bool {
a.start() <= b.start() && b.end() <= a.end()
}
fn overlap(a: &RangeInclusive<u32>, b: &RangeInclusive<u32>) -> bool {
a.contains(b.start()) || a.contains(b.end()) || b.contains(a.start()) || b.contains(a.end())
}
pub fn solve(input: String) { pub fn solve(input: String) {
let pairs = input let pairs = input
.lines() .lines()
.map(|l| { .map(|l| {
let mut ranges = l.split(',').map(|p| { let mut ranges = l.split(',').map(|p| {
let mut numbers = p.split('-').map(|n| n.parse::<u32>().unwrap()); let mut numbers = p.split('-').map(|n| n.parse::<u32>().unwrap());
numbers.next().unwrap()..=numbers.next().unwrap() (numbers.next().unwrap(), numbers.next().unwrap())
}); });
(ranges.next().unwrap(), ranges.next().unwrap()) (ranges.next().unwrap(), ranges.next().unwrap())
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
// Part 1
let score = pairs let score = pairs
.iter() .iter()
.filter(|(a, b)| contains(a, b) || contains(b, a)) .filter(|((s1, e1), (s2, e2))| (s1 <= s2 && e2 <= e1) || (s2 <= s1 && e1 <= e2))
.count(); .count();
println!("Part 1: {score}"); 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}"); println!("Part 2: {score}");
} }