Solve year 2022 day 04

This commit is contained in:
fuckwit 2023-11-23 20:50:44 +01:00
parent ec67927581
commit 03cbaa117f
4 changed files with 1046 additions and 0 deletions

1000
input/year2022/day04.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@ -15,4 +15,5 @@ pub mod year2022 {
pub mod day01;
pub mod day02;
pub mod day03;
pub mod day04;
}

View File

@ -85,5 +85,6 @@ fn year2022() -> Vec<Solution> {
solution!(year2022, day01),
solution!(year2022, day02),
solution!(year2022, day03),
solution!(year2022, day04),
]
}

44
src/year2022/day04.rs Normal file
View File

@ -0,0 +1,44 @@
use crate::util::parse::ParseExt;
fn solve(input: &str, filter: fn(u32, u32, u32, u32) -> bool) -> usize {
input
.lines()
.filter_map(|line| {
let mut nums = line.u32s();
if (filter)(nums.next()?, nums.next()?, nums.next()?, nums.next()?) {
Some(())
} else {
None
}
})
.count()
}
pub fn part1(input: &str) -> impl std::fmt::Display {
solve(input, |s1, e1, s2, e2| {
s1 <= s2 && e1 >= e2 || s1 >= s2 && e1 <= e2
})
}
pub fn part2(input: &str) -> impl std::fmt::Display {
solve(input, |s1, e1, s2, e2| {
s1 >= s2 && s1 <= e2 || s2 >= s1 && s2 <= e1
})
}
#[test]
fn test_part1() {
assert_eq!(
"2",
part1("2-4,6-8\n2-3,4-5\n5-7,7-9\n2-8,3-7\n6-6,4-6\n2-6,4-8").to_string()
)
}
#[test]
fn test_part2() {
assert_eq!(
"4",
part2("2-4,6-8\n2-3,4-5\n5-7,7-9\n2-8,3-7\n6-6,4-6\n2-6,4-8").to_string()
)
}