32 lines
880 B
Rust
32 lines
880 B
Rust
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<R: BufRead>(&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::<u64>().ok())
|
|
.filter(|&value| intervals.contains(value))
|
|
.count() as u64;
|
|
|
|
(fresh_count, intervals.len())
|
|
}
|
|
}
|