use crate::common::interval::MultiInterval; use crate::solvers::Solver; use std::io::BufRead; pub struct Cafeteria {} impl Solver for Cafeteria { const PUZZLE_INDEX: u8 = 5; const PUZZLE_NAME: &'static str = "Cafeteria"; fn process_data(&self, mut reader: R) -> (u64, u64) { // Builds intervals collection. let mut intervals = MultiInterval::new(); for line in reader .by_ref() .lines() .map_while(|x| x.ok().filter(|s| !s.is_empty())) { intervals.add(line.parse().unwrap()); } // Tests values against intervals. let fresh_count = reader .lines() .map_while(|x| x.ok()?.parse::().ok()) .filter(|&value| intervals.contains(value)) .count() as u64; (fresh_count, intervals.len()) } }