pub fn mutual_inclusion(first_pair: &[u32], second_pair: &[u32]) -> bool { (first_pair[0] <= second_pair[0] && first_pair[1] >= second_pair[1]) || (second_pair[0] <= first_pair[0] && second_pair[1] >= first_pair[1]) } pub fn complete_overlap(first_pair: &[u32], second_pair: &[u32]) -> bool { first_pair[0] >= second_pair[0] && first_pair[0] <= second_pair[1] || first_pair[1] >= second_pair[0] && first_pair[1] <= second_pair[1] || mutual_inclusion(first_pair, second_pair) } pub fn solve(file_path: &str, unary_operator: &dyn Fn(&[u32], &[u32]) -> bool) -> i32 { std::fs::read_to_string(file_path) .unwrap_or_else(|err| panic!("Please provide a text file as an argument: {err}")) .lines() .map(|line| { let tmp = line.split(',').collect::>(); let first_pair = tmp .first() .unwrap_or_else(|| panic!("First character error")) .split('-') .map(|first_split| { first_split .parse::() .unwrap_or_else(|err| panic!("Parsing number in first pair failed: {err}")) }) .collect::>(); let second_pair = tmp .last() .unwrap_or_else(|| panic!("First character error")) .split('-') .map(|first_split| { first_split .parse::() .unwrap_or_else(|err| panic!("Parsing number in first pair failed: {err}")) }) .collect::>(); i32::from(unary_operator(&first_pair, &second_pair)) }) .sum() }