This commit is contained in:
pjht 2022-12-04 07:55:30 -06:00
parent 986ae7ef08
commit 1d8471ec06
2 changed files with 46 additions and 0 deletions

45
src/day04.rs Normal file
View File

@ -0,0 +1,45 @@
use std::ops::RangeInclusive;
use aoc_runner_derive::{aoc, aoc_generator};
fn parse_range(range: &str) -> RangeInclusive<u64> {
let (start, end) = range.split_once('-').unwrap();
start.parse().unwrap()..=end.parse().unwrap()
}
#[aoc_generator(day4)]
pub fn input_generator(input: &str) -> Vec<(RangeInclusive<u64>, RangeInclusive<u64>)> {
input
.lines()
.map(|l| {
let (first, second) = l.split_once(',').unwrap();
(parse_range(first), parse_range(second))
})
.collect()
}
fn contains_range(slf: &RangeInclusive<u64>, other: &RangeInclusive<u64>) -> bool {
slf.start() <= other.start() && slf.end() >= other.end()
}
fn overlaps_with_range(slf: &RangeInclusive<u64>, other: &RangeInclusive<u64>) -> bool {
slf.contains(other.start())
}
#[aoc(day4, part1)]
pub fn solve_part1(input: &[(RangeInclusive<u64>, RangeInclusive<u64>)]) -> usize {
input
.iter()
.filter(|(first, second)| contains_range(first, second) | contains_range(second, first))
.count()
}
#[aoc(day4, part2)]
pub fn solve_part2(input: &[(RangeInclusive<u64>, RangeInclusive<u64>)]) -> usize {
input
.iter()
.filter(|(first, second)| {
overlaps_with_range(first, second) | overlaps_with_range(second, first)
})
.count()
}

View File

@ -3,5 +3,6 @@ use aoc_runner_derive::aoc_lib;
pub mod day01;
pub mod day02;
pub mod day03;
pub mod day04;
aoc_lib! { year = 2022 }