about summary refs log tree commit diff
path: root/day02.rs
diff options
context:
space:
mode:
authorLeah Neukirchen <leah@vuxu.org>2018-12-03 18:10:24 +0100
committerLeah Neukirchen <leah@vuxu.org>2018-12-03 18:10:24 +0100
commit7d95cb7cef2105f441e3e18248b389928b62c7f9 (patch)
tree49ba139a1836fb41e5b543368c7d6c53c6e352e9 /day02.rs
parent89d878ebfdd90a540f4a93329c14db56d77be229 (diff)
downloadadventofcode2018-7d95cb7cef2105f441e3e18248b389928b62c7f9.tar.gz
adventofcode2018-7d95cb7cef2105f441e3e18248b389928b62c7f9.tar.xz
adventofcode2018-7d95cb7cef2105f441e3e18248b389928b62c7f9.zip
day02
Diffstat (limited to 'day02.rs')
-rw-r--r--day02.rs33
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;
+            }
+        }
+    }
+}