main.rs (973B)
1 use regex::Regex;
2
3 fn main() {
4 let re = Regex::new(r"^([0-9]+)-([0-9]+),([0-9]+)-([0-9]+)$").unwrap();
5 let input = std::fs::read_to_string("input.txt")
6 .unwrap()
7 .trim()
8 .split('\n')
9 .map(|x| {
10 re.captures(x)
11 .unwrap()
12 .iter()
13 .skip(1)
14 .map(|c| c.unwrap().as_str().parse::<i32>().unwrap())
15 .collect()
16 })
17 .collect::<Vec<Vec<i32>>>();
18 // 477
19 println!("Part 1: {}", part_1(&input));
20 // 830
21 println!("Part 2: {}", part_2(&input));
22 }
23
24 fn part_1(input: &Vec<Vec<i32>>) -> i32 {
25 input
26 .iter()
27 .filter(|rs| (rs[0] <= rs[2] && rs[1] >= rs[3]) || (rs[2] <= rs[0] && rs[3] >= rs[1]))
28 .count() as i32
29 }
30
31 fn part_2(input: &Vec<Vec<i32>>) -> i32 {
32 input
33 .iter()
34 .filter(|rs| (rs[0] <= rs[2] && rs[2] <= rs[1]) || (rs[2] <= rs[0] && rs[0] <= rs[3]))
35 .count() as i32
36 }