diff options
Diffstat (limited to 'day05.rs')
-rw-r--r-- | day05.rs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/day05.rs b/day05.rs new file mode 100644 index 0000000..ea6e919 --- /dev/null +++ b/day05.rs @@ -0,0 +1,31 @@ +use std::fs::File; +use std::io::prelude::*; + +fn react(s: &mut String) -> usize { + while let Some(pos) = (0..s.len() - 1).find(|i| { + (s.as_bytes()[*i] as i32 - s.as_bytes()[*i + 1] as i32).abs() == 32 + }) { + s.replace_range(pos..pos + 2, ""); + } + return s.len(); +} + +fn main() { + let mut f = File::open("day05").unwrap(); + + let mut s = String::new(); + f.read_to_string(&mut s).unwrap(); + s.pop(); + + println!("{}", react(&mut s.clone())); + + println!("{}", + (65u8..65u8 + 27) + .map(|c| { + let mut t = s.clone(); + t.retain(|b| b != (c as char) && b != (c + 32u8) as char); + react(&mut t) + }) + .min() + .unwrap()); +} |