diff --git a/examples/day03_1.rs b/examples/day03_1.rs new file mode 100644 index 0000000..daf86dd --- /dev/null +++ b/examples/day03_1.rs @@ -0,0 +1,19 @@ +use std::collections::HashSet; + +fn main() -> Result<(), Box> { + let lines: Vec = std::io::stdin().lines().map(|x| x.unwrap()).collect(); + let mut result = 0; + for line in lines { + let chars: Vec = line.chars().collect(); + let a: HashSet = (chars[0..chars.len()/2]).iter().map(|x| *x).collect(); + let b: HashSet = (chars[chars.len()/2..]).iter().map(|x| *x).collect(); + let c = *a.intersection(&b).next().unwrap(); + result += match c { + 'a'..='z' => (c as u32) - ('a' as u32) + 1, + 'A'..='Z' => (c as u32) - ('A' as u32) + 27, + _ => todo!(), + }; + } + println!("{:?}", result); + Ok(()) +} diff --git a/examples/day03_2.rs b/examples/day03_2.rs new file mode 100644 index 0000000..fb3986d --- /dev/null +++ b/examples/day03_2.rs @@ -0,0 +1,20 @@ +use std::collections::HashSet; + +fn main() -> Result<(), Box> { + let lines: Vec = std::io::stdin().lines().map(|x| x.unwrap()).collect(); + let mut result = 0; + for window in lines.chunks(3) { + let a: HashSet = (window[0]).chars().collect(); + let b: HashSet = (window[1]).chars().collect(); + let c: HashSet = (window[2]).chars().collect(); + let d: HashSet = a.intersection(&b).map(|x| *x).collect(); + let mut e = d.intersection(&c); + result += match *e.next().unwrap() { + w @ 'a'..='z' => (w as u32) - ('a' as u32) + 1, + w @ 'A'..='Z' => (w as u32) - ('A' as u32) + 27, + _ => todo!(), + }; + } + println!("{:?}", result); + Ok(()) +}