[2016][rust][3.0]
change mnzlqyzuqwkvzrmvwmpooqqorrsuosut
commit 01be52d4d00d9259d4e9bba5cd6fcef0db514f0e
author Alpha Chen <alpha.chen@gmail.com>
date
parent vuqxzvmx
diff --git a/2016/rust/src/day_03.rs b/2016/rust/src/day_03.rs
new file mode 100644
index 0000000..4f9499c
--- /dev/null
+++ b/2016/rust/src/day_03.rs
@@ -0,0 +1,24 @@
+pub fn solve(input: &str) -> String {
+  let parsed = input.split_whitespace()
+    .map(str::parse)
+    .collect::<Result<Vec<usize>, _>>()
+    .expect("unable to parse input");
+  let count = parsed.chunks(3)
+    .map(|w| Triangle(w[0], w[1], w[2]))
+    .filter(Triangle::is_valid)
+    .count();
+  count.to_string()
+}
+
+struct Triangle(usize, usize, usize);
+impl Triangle {
+  fn is_valid(&self) -> bool {
+    self.0 + self.1 > self.2 && self.0 + self.2 > self.1 &&
+    self.1 + self.2 > self.0
+  }
+}
+
+#[test]
+fn test_triangle() {
+  assert!(!Triangle(5, 10, 25).is_valid());
+}
diff --git a/2016/rust/src/lib.rs b/2016/rust/src/lib.rs
index f396c42..3160911 100644
--- a/2016/rust/src/lib.rs
+++ b/2016/rust/src/lib.rs
@@ -1,2 +1,3 @@
 pub mod day_01;
 pub mod day_02;
+pub mod day_03;
diff --git a/2016/rust/src/main.rs b/2016/rust/src/main.rs
index bbd3b10..bd7710f 100644
--- a/2016/rust/src/main.rs
+++ b/2016/rust/src/main.rs
@@ -8,5 +8,5 @@ fn main() {
   let mut input = String::new();
   io::stdin().read_to_string(&mut input).ok();
 
-  println!("{}", day_02::solve(&input));
+  println!("{}", day_03::solve(&input));
 }