summary refs log tree commit diff homepage
path: root/2017
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--2017/src/bin/day03.rs34
1 files changed, 34 insertions, 0 deletions
diff --git a/2017/src/bin/day03.rs b/2017/src/bin/day03.rs
index 8a556a1..99aecd2 100644
--- a/2017/src/bin/day03.rs
+++ b/2017/src/bin/day03.rs
@@ -1,3 +1,4 @@
+use std::collections::HashMap;
 use std::io::{self, Read};
 
 fn solve1(input: i32) -> i32 {
@@ -19,11 +20,44 @@ fn solve1(input: i32) -> i32 {
     unreachable!()
 }
 
+fn solve2(input: i32) -> i32 {
+    let spiral = [(1, 0), (0, 1), (-1, 0), (0, -1)];
+    let (mut x, mut y) = (0i32, 0i32);
+    let mut values = HashMap::new();
+    values.insert((0, 0), 1);
+
+    for (i, &(dx, dy)) in spiral.iter().cycle().enumerate() {
+        let length = 1 + i / 2;
+        for _ in 0..length {
+            let n =
+                values.get(&(x,     y    )).unwrap_or(&0) +
+                values.get(&(x - 1, y - 1)).unwrap_or(&0) +
+                values.get(&(x,     y - 1)).unwrap_or(&0) +
+                values.get(&(x + 1, y - 1)).unwrap_or(&0) +
+                values.get(&(x + 1, y    )).unwrap_or(&0) +
+                values.get(&(x + 1, y + 1)).unwrap_or(&0) +
+                values.get(&(x,     y + 1)).unwrap_or(&0) +
+                values.get(&(x - 1, y + 1)).unwrap_or(&0) +
+                values.get(&(x - 1, y    )).unwrap_or(&0);
+            values.insert((x, y), n);
+
+            if n > input {
+                return n;
+            }
+
+            x += dx;
+            y += dy;
+        }
+    }
+    unreachable!()
+}
+
 fn main() {
     let mut input = String::new();
     io::stdin().read_to_string(&mut input).unwrap();
 
     println!("Part 1: {}", solve1(input.trim().parse().unwrap()));
+    println!("Part 2: {}", solve2(input.trim().parse().unwrap()));
 }
 
 #[test]
only broke one of my rules when it comes to book selection. 2024-11-05Add a bunch of photosJune McEnroe 2024-10-12Publish "film review"June McEnroe 2024-10-12Add photos from October 6June McEnroe 2024-10-12Add photos from October 5June McEnroe 2024-10-09Add photos from October 1June McEnroe Ok the first 3 are from September 29 but I didn't want to spoil the black and white roll. 2024-10-07Add photos from September 29June McEnroe 2024-10-07Add photos from September 28June McEnroe 2024-10-07Add photos from September 22June McEnroe 2024-09-25Add photos from September 15June McEnroe 2024-09-24Add photos from September 14June McEnroe 2024-09-24Add photos from September 12June McEnroe 2024-09-24Add photos from September 7June McEnroe 2024-09-24Allow not having descriptionsJune McEnroe I'm sorry, I can't keep writing descriptions. It makes posting photos take too long, I often don't know the words for what I'm looking at, and a good description is an entirely different work of art than the photo I took, and I'm just a photographer. It's visual art. 2024-09-23Automatically select the last used lens for a bodyJune McEnroe 2024-09-19Add photos from September 5June McEnroe Had to prefix the folder number onto these file names manually because they must have come out of a different scanner or something. 2024-09-15Add some more film stocks to the listJune McEnroe 2024-09-13Add photos from September 2June McEnroe 2024-09-13Add Fomapan 200 to films listJune McEnroe 2024-09-10Add August 29 picnic photosJune McEnroe 2024-09-08Apply some bold to trips renderingJune McEnroe This seems easier to visually scan. The only other thing I'd like is a nicer date rendering but JavaScript is useless for that. 2024-09-08Render trips hopefully more efficientlyJune McEnroe 2024-09-08Allow removing bodies and lensesJune McEnroe 2024-09-08Limit body width so it looks less silly on desktopJune McEnroe 2024-09-07Handle no film being loadedJune McEnroe 2024-09-07Fancy up the text a littleJune McEnroe