diff options
author | Leah Neukirchen <leah@vuxu.org> | 2018-12-03 18:10:24 +0100 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2018-12-03 18:10:24 +0100 |
commit | 7d95cb7cef2105f441e3e18248b389928b62c7f9 (patch) | |
tree | 49ba139a1836fb41e5b543368c7d6c53c6e352e9 /day02.rs | |
parent | 89d878ebfdd90a540f4a93329c14db56d77be229 (diff) | |
download | adventofcode2018-7d95cb7cef2105f441e3e18248b389928b62c7f9.tar.gz adventofcode2018-7d95cb7cef2105f441e3e18248b389928b62c7f9.tar.xz adventofcode2018-7d95cb7cef2105f441e3e18248b389928b62c7f9.zip |
day02
Diffstat (limited to 'day02.rs')
-rw-r--r-- | day02.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/day02.rs b/day02.rs new file mode 100644 index 0000000..3c5b9b5 --- /dev/null +++ b/day02.rs @@ -0,0 +1,33 @@ +use std::fs::File; +use std::io::{BufRead, BufReader}; + +fn appears(s: &str, n: usize) -> bool { + s.chars().any(|c| s.matches(c).count() == n) +} + +fn same_but_one(s: &str, t: &str) -> Option<String> { + let mut x = s.chars().zip(t.chars()).enumerate().filter(|(_, (a,b))| a != b); + match (x.next(), x.next()) { + (Some(m), None) => Some(format!("{}{}", &s[..m.0], &s[m.0+1..])), + _ => None + } +} + +fn main() { + let f = File::open("day02").unwrap(); + + let v: Vec<_> = BufReader::new(&f).lines().map(|l| l.unwrap()).collect(); + + println!("{}", + v.iter().filter(|s| appears(s, 2)).count() * + v.iter().filter(|s| appears(s, 3)).count()); + + 'outer: for x in &v { + for y in &v { + if let Some(s) = same_but_one(&x, &y) { + println!("{}", s); + break 'outer; + } + } + } +} |