diff --git a/04/main.rs b/04/main.rs new file mode 100644 index 0000000..0614242 --- /dev/null +++ b/04/main.rs @@ -0,0 +1,81 @@ +#![allow(dead_code)] +use std::fs::File; +use std::io; +use std::io::BufRead; +use std::path::Path; +use std::time::Instant; + +fn main() { + let now = Instant::now(); + part_one(); + let part_one_duration = now.elapsed(); + part_two(); + let part_two_duration = now.elapsed(); + println!( + "p1: {}ms, p2: {}ms", + part_one_duration.as_millis(), + (part_two_duration - part_one_duration).as_millis() + ); +} + +fn read_lines

(filename: P) -> io::Result>> +where + P: AsRef, +{ + // note that this discards a final newline + let file = File::open(filename)?; + Ok(io::BufReader::new(file).lines()) +} + +fn part_one() { + if let Ok(lines) = read_lines("./inputs/input") { + let mut overlaps = 0; + for line in lines { + if let Ok(ranges) = line { + let v: Vec> = ranges + .split(",") + .map(|r| r.split("-").map(|i| i.parse::().unwrap()).collect()) + .collect(); + // 00 ... 01 + // 10 ... 11 + if (v.get(0).unwrap().get(0) <= v.get(1).unwrap().get(0) + && v.get(0).unwrap().get(1) >= v.get(1).unwrap().get(1)) + || (v.get(1).unwrap().get(0) <= v.get(0).unwrap().get(0) + && v.get(1).unwrap().get(1) >= v.get(0).unwrap().get(1)) + { + overlaps += 1; + } + } + } + println!("{}", overlaps); + } +} + +fn part_two() { + if let Ok(lines) = read_lines("./inputs/input") { + let mut overlaps = 0; + for line in lines { + if let Ok(ranges) = line { + let v: Vec> = ranges + .split(",") + .map(|r| r.split("-").map(|i| i.parse::().unwrap()).collect()) + .collect(); + // 00 ... 01 + // 10 ... 11 + // uuuuuugh + if (v.get(0).unwrap().get(0) <= v.get(1).unwrap().get(0) + && v.get(0).unwrap().get(1) >= v.get(1).unwrap().get(1)) + || (v.get(1).unwrap().get(0) <= v.get(0).unwrap().get(0) + && v.get(1).unwrap().get(1) >= v.get(0).unwrap().get(1)) + || (v.get(0).unwrap().get(0) <= v.get(1).unwrap().get(1) + && v.get(0).unwrap().get(0) >= v.get(1).unwrap().get(0)) + || (v.get(0).unwrap().get(1) >= v.get(1).unwrap().get(0) + && v.get(0).unwrap().get(1) <= v.get(1).unwrap().get(1)) + { + overlaps += 1; + } + } + } + println!("{}", overlaps); + } +}