summary refs log tree commit diff homepage
path: root/2017/src/bin
diff options
context:
space:
mode:
authorJune McEnroe <programble@gmail.com>2017-12-03 19:35:22 -0500
committerJune McEnroe <programble@gmail.com>2017-12-03 19:35:22 -0500
commit8fa601d965a75cca5ca203c308c5af9a5cf0c66a (patch)
tree89580e4902b023c8c8f81dd7ace2f7e5f3961e2d /2017/src/bin
parentDay 3, clean up (diff)
downloadaoc-8fa601d965a75cca5ca203c308c5af9a5cf0c66a.tar.gz
aoc-8fa601d965a75cca5ca203c308c5af9a5cf0c66a.zip
Day 3, part 2
I am super surprised that worked on the first try.
Diffstat (limited to '2017/src/bin')
-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]
d>Apply consecutive formatting codes at onceJune McEnroe Fixes the failing splits test. 2018-09-14Add tests for formatParseJune McEnroe With one currently failing so you know they're worth it. 2018-09-13Preview with nick in input windowJune McEnroe 2018-09-13Never send PRIVMSG to TagStatus or TagVerboseJune McEnroe 2018-09-13Move color selection to format.cJune McEnroe 2018-09-13Fix len for format->split at end of stringJune McEnroe 2018-09-13Avoid uninitialized x in uiReadJune McEnroe 2018-09-13Add IRCDefault to colors enumJune McEnroe 2018-09-13Return a format->split even at the end of the stringJune McEnroe 2018-09-13Fix weird tab-complete after commaJune McEnroe I have no idea why I did this. 2018-09-13Rewrite UI againJune McEnroe The persistent topic is gone and the status line is now at the top. The status formatting still needs to be reworked. I also want to try showing the nick in the input window so it really looks like your next message. 2018-09-12Add note about C-oJune McEnroe Why are there so few well usable ctrl key bindings? 2018-09-12Use formatParse split to position input cursorJune McEnroe 2018-09-12Factor out IRC formatting parsingJune McEnroe 2018-09-11Add /help equivalent to /manJune McEnroe 2018-09-11Don't render every PM as a pingJune McEnroe 2018-09-11Add urlOpenMatchJune McEnroe 2018-09-10Depend on man.sh for chroot.tar targetJune McEnroe 2018-09-10Set LESSSECURE=1 in man.shJune McEnroe Ridiculous. 2018-09-10Add /man commandJune McEnroe 2018-09-10Install man page in chrootJune McEnroe 2018-09-10Install man pageJune McEnroe 2018-09-10Split keys into subsections and document colorsJune McEnroe 2018-09-10Add "blank" lines to chatte.1June McEnroe 2018-09-10Document key bindings in chatte.1June McEnroe 2018-09-08Document slash commands in chatte.1June McEnroe