diff options
author | Leah Neukirchen <leah@vuxu.org> | 2018-12-06 15:57:53 +0100 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2018-12-06 15:57:53 +0100 |
commit | b3d780a4dba7edc1cbd151528d36761e936c4ce8 (patch) | |
tree | 381e18af444c69660a918c25f5223cc6508363c0 /day05.rs | |
parent | 9b9dc4d2fc08c07435d61e34a36b8ce037168a5c (diff) | |
download | adventofcode2018-b3d780a4dba7edc1cbd151528d36761e936c4ce8.tar.gz adventofcode2018-b3d780a4dba7edc1cbd151528d36761e936c4ce8.tar.xz adventofcode2018-b3d780a4dba7edc1cbd151528d36761e936c4ce8.zip |
day05
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()); +} |