diff --git a/day04/Cargo.lock b/day04/Cargo.lock new file mode 100644 index 0000000..b8f9a18 --- /dev/null +++ b/day04/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "day04" +version = "0.1.0" diff --git a/day04/Cargo.toml b/day04/Cargo.toml new file mode 100644 index 0000000..aa462dc --- /dev/null +++ b/day04/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day04" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/day04/src/main.rs b/day04/src/main.rs new file mode 100644 index 0000000..be78f8c --- /dev/null +++ b/day04/src/main.rs @@ -0,0 +1,25 @@ +use std::error; +use std::fs::File; +use std::io::BufRead; +use std::io::BufReader; +use std::ops; + +fn main() -> Result<(), Box> { + let f = File::open("input.txt")?; + let reader = BufReader::new(f); + + let mut count: u32 = 0; + for line in reader.lines() { + let line = line?; + let range_strs = line.split(",").collect::>(); + let range_a_u32 = range_strs[0].split("-").map(|x| x.parse::().unwrap()).collect::>(); + let range_a = ops::Range { start: range_a_u32[0], end: range_a_u32[1] + 1 }; + let range_b_u32 = range_strs[1].split("-").map(|x| x.parse::().unwrap()).collect::>(); + let range_b = ops::Range { start: range_b_u32[0], end: range_b_u32[1] + 1 }; + if (range_a.contains(&range_b.start) && range_a.contains(&(range_b.end - 1))) || (range_b.contains(&range_a.start) && range_b.contains(&(range_a.end - 1))) { + count += 1; + } + } + println!("Found {} completely contained ranges.", count); + Ok(()) +}