Solve day 4
This commit is contained in:
parent
5c23f8a99a
commit
5c01353113
3 changed files with 1069 additions and 0 deletions
6
input/04-test
Normal file
6
input/04-test
Normal file
|
@ -0,0 +1,6 @@
|
|||
2-4,6-8
|
||||
2-3,4-5
|
||||
5-7,7-9
|
||||
2-8,3-7
|
||||
6-6,4-6
|
||||
2-6,4-8
|
63
src/bin/04.rs
Normal file
63
src/bin/04.rs
Normal file
|
@ -0,0 +1,63 @@
|
|||
use aoc2022::*;
|
||||
|
||||
const INPUT: &str = include_str!("../../input/04");
|
||||
|
||||
fn main() {
|
||||
let solution = INPUT
|
||||
.lines()
|
||||
.map(parse_line)
|
||||
.filter(|&(a, b)| a.contains(b) || b.contains(a))
|
||||
.count();
|
||||
solved_level_1(solution);
|
||||
|
||||
let solution = INPUT
|
||||
.lines()
|
||||
.map(parse_line)
|
||||
.filter(|&(a, b)| a.overlaps(b))
|
||||
.count();
|
||||
solved_level_2(solution);
|
||||
}
|
||||
|
||||
fn parse_line(line: &str) -> (Range, Range) {
|
||||
let (a, b) = line.split_once(',').unwrap();
|
||||
(a.into(), b.into())
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
struct Range {
|
||||
start: i64,
|
||||
end: i64,
|
||||
}
|
||||
|
||||
impl Range {
|
||||
fn contains<O>(self, other: O) -> bool
|
||||
where
|
||||
O: Into<Self>,
|
||||
{
|
||||
let other = other.into();
|
||||
other.start >= self.start && other.end <= self.end
|
||||
}
|
||||
|
||||
fn overlaps(self, other: Self) -> bool {
|
||||
self.contains(other.start)
|
||||
|| self.contains(other.end)
|
||||
|| other.contains(self.start)
|
||||
|| other.contains(self.end)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<&str> for Range {
|
||||
fn from(s: &str) -> Self {
|
||||
let (start, end) = s.split_once('-').unwrap();
|
||||
Self {
|
||||
start: start.parse().unwrap(),
|
||||
end: end.parse().unwrap(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<i64> for Range {
|
||||
fn from(n: i64) -> Self {
|
||||
Self { start: n, end: n }
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue