use crate::read; use tuple_map::*; fn get_ranges(elf: &str) -> std::ops::RangeInclusive { 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::>(); #[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); } }