Use RangeInclusive instead, and get second star
This commit is contained in:
parent
b14a2306c1
commit
eb56d312cc
|
@ -1,16 +1,28 @@
|
||||||
#![feature(iterator_try_collect, iter_collect_into)]
|
#![feature(iterator_try_collect)]
|
||||||
|
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::io::{self, BufRead};
|
use std::io::{self, BufRead};
|
||||||
use std::ops::Range;
|
use std::ops::RangeInclusive;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
struct WorkRange(Range<u32>);
|
struct WorkRange(RangeInclusive<u32>);
|
||||||
|
|
||||||
impl WorkRange {
|
impl WorkRange {
|
||||||
|
#[allow(dead_code)]
|
||||||
|
fn init(start: u32, end: u32) -> Self {
|
||||||
|
WorkRange(start..=end)
|
||||||
|
}
|
||||||
|
|
||||||
fn fully_contains(&self, other: &Self) -> bool {
|
fn fully_contains(&self, other: &Self) -> bool {
|
||||||
self.0.start <= other.0.start && self.0.end >= other.0.end
|
self.0.contains(other.0.start()) && self.0.contains(other.0.end())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn overlaps(&self, other: &Self) -> bool {
|
||||||
|
self.0.contains(other.0.start())
|
||||||
|
|| self.0.contains(other.0.end())
|
||||||
|
|| other.0.contains(self.0.start())
|
||||||
|
|| other.0.contains(self.0.end())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +31,7 @@ impl FromStr for WorkRange {
|
||||||
|
|
||||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||||
let spl: Vec<u32> = s.split('-').map(|n| n.parse()).try_collect()?;
|
let spl: Vec<u32> = s.split('-').map(|n| n.parse()).try_collect()?;
|
||||||
Ok(WorkRange(spl[0]..spl[1]))
|
Ok(WorkRange(spl[0]..=spl[1]))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,4 +72,25 @@ fn part1(pairs: &[ElfPair]) {
|
||||||
println!("num containing: {}", sum);
|
println!("num containing: {}", sum);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn part2(_pairs: &[ElfPair]) {}
|
fn part2(pairs: &[ElfPair]) {
|
||||||
|
let sum = pairs
|
||||||
|
.iter()
|
||||||
|
.filter(|ElfPair(l, r)| l.overlaps(r) || r.overlaps(l))
|
||||||
|
.count();
|
||||||
|
println!("num overlapping: {}", sum);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn range_overlaps() {
|
||||||
|
assert!(!WorkRange::init(2, 4).overlaps(&WorkRange::init(6, 8)));
|
||||||
|
assert!(!WorkRange::init(2, 3).overlaps(&WorkRange::init(4, 5)));
|
||||||
|
assert!(WorkRange::init(5, 7).overlaps(&WorkRange::init(7, 9)));
|
||||||
|
assert!(WorkRange::init(2, 8).overlaps(&WorkRange::init(3, 7)));
|
||||||
|
assert!(WorkRange::init(6, 6).overlaps(&WorkRange::init(4, 6)));
|
||||||
|
assert!(WorkRange::init(2, 6).overlaps(&WorkRange::init(4, 8)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue