summary refs log tree commit diff homepage
path: root/src/bin
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2016-12-04 00:03:49 -0500
committerJune McEnroe <june@causal.agency>2020-11-22 00:13:50 -0500
commitb51befc02e6a3a9a8e73330d194c1b7cd456f153 (patch)
treeb29f72ac8528eddb3da2560bfbf2a5506d4edf50 /src/bin
parentDay 3 (diff)
downloadaoc-b51befc02e6a3a9a8e73330d194c1b7cd456f153.tar.gz
aoc-b51befc02e6a3a9a8e73330d194c1b7cd456f153.zip
Day 3 part 2
Diffstat (limited to 'src/bin')
-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"));
 }