diff --git a/2022/src/day04.rs b/2022/src/day04.rs index b6909dc..69f7653 100644 --- a/2022/src/day04.rs +++ b/2022/src/day04.rs @@ -49,26 +49,23 @@ fn parse_assignments(input: &[u8]) -> IResult<&[u8], Vec<(Assignment, Assignment many0(terminated(parse_line, newline))(input) } -pub fn part1(input: &[u8]) -> Result { +fn parts_common(input: &[u8], filter: impl Fn(Assignment, Assignment) -> bool) -> Result { let assigments = parse_input(input, parse_assignments)?; let overlapping = assigments .into_iter() - .filter(|&(a, b)| a.one_contains(b)) + .filter(|&(a, b)| filter(a, b)) .count(); Ok(overlapping.to_string()) } +pub fn part1(input: &[u8]) -> Result { + parts_common(input, Assignment::one_contains) +} + pub fn part2(input: &[u8]) -> Result { - let assigments = parse_input(input, parse_assignments)?; - - let overlapping = assigments - .into_iter() - .filter(|&(a, b)| a.one_overlaps(b)) - .count(); - - Ok(overlapping.to_string()) + parts_common(input, Assignment::one_overlaps) } #[cfg(test)]