From 111d183782f8a2dfc52447f326b3a0a898aac800 Mon Sep 17 00:00:00 2001 From: missing Date: Sun, 4 Dec 2022 11:27:16 -0600 Subject: [PATCH] day 4 --- src/days/day4.rs | 38 ++++++++++++++++++++++++++++++++++++++ src/lib.rs | 1 + 2 files changed, 39 insertions(+) create mode 100644 src/days/day4.rs diff --git a/src/days/day4.rs b/src/days/day4.rs new file mode 100644 index 0000000..74ec543 --- /dev/null +++ b/src/days/day4.rs @@ -0,0 +1,38 @@ +use std::ops::Range; + +use aoc_runner_derive::{aoc, aoc_generator}; + +#[aoc_generator(day4)] +fn generator(s: &str) -> Vec<(Range, Range)> { + s.lines() + .map(|l| { + let (a, b) = l.split_once(',').unwrap(); + let a = a.split_once('-').unwrap(); + let b = b.split_once('-').unwrap(); + ( + a.0.parse().unwrap()..a.1.parse().unwrap(), + b.0.parse().unwrap()..b.1.parse().unwrap(), + ) + }) + .collect() +} + +#[aoc(day4, part1)] +fn part1(input: &[(Range, Range)]) -> u32 { + input + .iter() + .filter(|(a, b)| { + (a.start <= b.start && a.end >= b.end) || (a.start >= b.start && a.end <= b.end) + }) + .count() as u32 +} + +#[aoc(day4, part2)] +fn part2(input: &[(Range, Range)]) -> u32 { + input + .iter() + .filter(|(a, b)| { + (a.start <= b.end && a.start >= b.start) || (b.start <= a.end && b.start >= a.start) + }) + .count() as u32 +} diff --git a/src/lib.rs b/src/lib.rs index 6cc4da4..579f060 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,6 +4,7 @@ mod days { mod day1; mod day2; mod day3; + mod day4; } aoc_lib! { year = 2022 }