57 lines
1.6 KiB
Rust
57 lines
1.6 KiB
Rust
use regex::Regex;
|
|
|
|
pub fn part_one(input: &str) -> Option<u32> {
|
|
let linere = Regex::new(r"(\d+)-(\d+),(\d+)-(\d+)").unwrap();
|
|
let mut result = 0;
|
|
for l in input.lines() {
|
|
let caps = linere.captures(l).unwrap();
|
|
let s1 = &caps[1].parse::<i32>().unwrap();
|
|
let e1 = &caps[2].parse::<i32>().unwrap();
|
|
let s2 = &caps[3].parse::<i32>().unwrap();
|
|
let e2 = &caps[4].parse::<i32>().unwrap();
|
|
if (s2 >= s1 && e2 <= e1) || (s1 >= s2 && e1 <= e2) {
|
|
result += 1;
|
|
}
|
|
}
|
|
Some(result)
|
|
}
|
|
|
|
pub fn part_two(input: &str) -> Option<u32> {
|
|
let linere = Regex::new(r"(\d+)-(\d+),(\d+)-(\d+)").unwrap();
|
|
let mut result = 0;
|
|
for l in input.lines() {
|
|
let caps = linere.captures(l).unwrap();
|
|
let s1 = &caps[1].parse::<i32>().unwrap();
|
|
let e1 = &caps[2].parse::<i32>().unwrap();
|
|
let s2 = &caps[3].parse::<i32>().unwrap();
|
|
let e2 = &caps[4].parse::<i32>().unwrap();
|
|
if !((s2 > e1 && e2 > e1) || (s1 > e2 && e1 > e2)) {
|
|
result += 1;
|
|
}
|
|
}
|
|
Some(result)
|
|
}
|
|
|
|
fn main() {
|
|
let input = &advent_of_code::read_file("inputs", 4);
|
|
advent_of_code::solve!(1, part_one, input);
|
|
advent_of_code::solve!(2, part_two, input);
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn test_part_one() {
|
|
let input = advent_of_code::read_file("examples", 4);
|
|
assert_eq!(part_one(&input), Some(2));
|
|
}
|
|
|
|
#[test]
|
|
fn test_part_two() {
|
|
let input = advent_of_code::read_file("examples", 4);
|
|
assert_eq!(part_two(&input), Some(4));
|
|
}
|
|
}
|