53 lines
1.2 KiB
Rust
53 lines
1.2 KiB
Rust
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::<u32>() else {
|
|
panic!("Min value {} is non-numeric.", values[0])
|
|
};
|
|
|
|
let Ok(max) = values[1].parse::<u32>() else {
|
|
panic!("Max value {} is non-numeric.", values[1])
|
|
};
|
|
|
|
Assignment {
|
|
min: min,
|
|
max: max,
|
|
}
|
|
}
|