34 lines
876 B
Rust
34 lines
876 B
Rust
use crate::read;
|
|
use tuple_map::*;
|
|
|
|
fn get_ranges(elf: &str) -> std::ops::RangeInclusive<i32> {
|
|
let r = elf.split_once('-').unwrap().map(|e| e.parse().unwrap());
|
|
r.0..=r.1
|
|
}
|
|
|
|
pub fn run() {
|
|
let input = read("04");
|
|
|
|
let lines = input
|
|
.lines()
|
|
.map(|l| l.split_once(',').unwrap().map(get_ranges))
|
|
.collect::<Vec<_>>();
|
|
#[cfg(feature = "part1")]
|
|
{
|
|
let count = lines
|
|
.iter()
|
|
.filter(|(a, b)| a.clone().all(|x| b.contains(&x)) || b.clone().all(|x| a.contains(&x)))
|
|
.count();
|
|
println!("Day 4, Part 01: {}", count);
|
|
}
|
|
|
|
#[cfg(feature = "part2")]
|
|
{
|
|
let count = lines
|
|
.iter()
|
|
.filter(|(a, b)| a.clone().any(|x| b.contains(&x)) || b.clone().any(|x| a.contains(&x)))
|
|
.count();
|
|
println!("Day 4, Part 02: {}", count);
|
|
}
|
|
}
|