summary refs log tree commit diff homepage
diff options
context:
space:
mode:
-rw-r--r--src/bin/day03.rs25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/bin/day03.rs b/src/bin/day03.rs
index 8116acb..76b5aa5 100644
--- a/src/bin/day03.rs
+++ b/src/bin/day03.rs
@@ -22,7 +22,7 @@ impl FromStr for Triangle {
     }
 }
 
-fn solve(input: &str) -> usize {
+fn solve1(input: &str) -> usize {
     input.lines()
         .map(str::parse)
         .map(Result::unwrap)
@@ -30,14 +30,33 @@ fn solve(input: &str) -> usize {
         .count()
 }
 
+fn solve2(input: &str) -> usize {
+    let triangles: Vec<Triangle> = input.lines()
+        .map(str::parse)
+        .map(Result::unwrap)
+        .collect();
+
+    triangles.chunks(3)
+        .flat_map(|triple| {
+            vec![
+                Triangle(triple[0].0, triple[1].0, triple[2].0),
+                Triangle(triple[0].1, triple[1].1, triple[2].1),
+                Triangle(triple[0].2, triple[1].2, triple[2].2),
+            ]
+        })
+        .filter(Triangle::valid)
+        .count()
+}
+
 fn main() {
     let mut input = String::new();
     io::stdin().read_to_string(&mut input).unwrap();
 
-    println!("Part 1: {}", solve(&input));
+    println!("Part 1: {}", solve1(&input));
+    println!("Part 2: {}", solve2(&input));
 }
 
 #[test]
 fn part1() {
-    assert_eq!(0, solve("5 10 25"));
+    assert_eq!(0, solve1("5 10 25"));
 }