use std::io; use std::vec::Vec; use crate::utils; struct Assignment { min: u32, max: u32, } pub fn execute() -> Result<(), io::Error> { let mut subsets = 0; let mut overlaps = 0; for line in utils::read_lines("input/day04.txt")? { let text = line?; let inputs: Vec<_> = text.split(',').collect(); let ass1 = parse_assignment(inputs[0]); let ass2 = parse_assignment(inputs[1]); if (ass2.max >= ass1.max && ass2.min <= ass1.min) || (ass1.max >= ass2.max && ass1.min <= ass2.min) { subsets += 1; } if (ass2.max >= ass1.min && ass2.min <= ass1.max) || (ass1.max >= ass2.min && ass1.min <= ass2.max) { overlaps += 1; } } utils::print_step(1, subsets); utils::print_step(2, overlaps); Ok(()) } fn parse_assignment(input: &str) -> Assignment { let values: Vec<_> = input.split('-').collect(); let Ok(min) = values[0].parse::() else { panic!("Min value {} is non-numeric.", values[0]) }; let Ok(max) = values[1].parse::() else { panic!("Max value {} is non-numeric.", values[1]) }; Assignment { min: min, max: max, } }