summary refs log tree commit diff homepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--2017/input/day03.txt1
-rw-r--r--2017/src/bin/day03.rs57
2 files changed, 58 insertions, 0 deletions
diff --git a/2017/input/day03.txt b/2017/input/day03.txt
new file mode 100644
index 0000000..9cf67fc
--- /dev/null
+++ b/2017/input/day03.txt
@@ -0,0 +1 @@
+368078
diff --git a/2017/src/bin/day03.rs b/2017/src/bin/day03.rs
new file mode 100644
index 0000000..4f38ac3
--- /dev/null
+++ b/2017/src/bin/day03.rs
@@ -0,0 +1,57 @@
+use std::io::{self, Read};
+
+// 17  16  15  14  13
+// 18   5   4   3  12
+// 19   6   1   2  11
+// 20   7   8   9  10
+// 21  22  23---> ...
+//
+// 1 R
+// 1 U
+// 2 L
+// 2 D
+// 3 R
+// 3 U
+// 4 L
+// 4 D
+// 5 R
+
+fn solve1(input: i32) -> i32 {
+    let ds = [(1, 0), (0, 1), (-1, 0), (0, -1)];
+
+    let mut n = 1;
+    let mut x = 0i32;
+    let mut y = 0i32;
+    let mut r = 1;
+    let mut i = 0;
+
+    for &(dx, dy) in ds.iter().cycle() {
+        for _ in 0..r {
+            if n == input {
+                return x.abs() + y.abs();
+            }
+
+            n += 1;
+            x += dx;
+            y += dy;
+        }
+        r += i % 2;
+        i += 1;
+    }
+    unreachable!()
+}
+
+fn main() {
+    let mut input = String::new();
+    io::stdin().read_to_string(&mut input).unwrap();
+
+    println!("Part 1: {}", solve1(input.trim().parse().unwrap()));
+}
+
+#[test]
+fn part1() {
+    assert_eq!(0, solve1(1));
+    assert_eq!(3, solve1(12));
+    assert_eq!(2, solve1(23));
+    assert_eq!(31, solve1(1024));
+}
allow HTTPSJune McEnroe 2020-08-25Support the pounce_env rc variableJune McEnroe 2020-08-25Remove deprecated option namesJune McEnroe 2020-08-25Document configuration and data file searchJune McEnroe 2020-08-24Use dataOpen for save fileJune McEnroe 2020-08-24Use configOpen to load localCAJune McEnroe 2020-08-24Use configPath to load client cert/privJune McEnroe 2020-08-24Use configOpen in getopt_configJune McEnroe 2020-08-24Import xdg.c from catgirlJune McEnroe 2020-08-23Replace “RAND_bytes” by “getentropy”Issam E. Maghni 2020-08-16contrib/palaver: Add no message preview flagsJune McEnroe 2020-08-13contrib/palaver: Don't set channel for PMsJune McEnroe 2020-08-13Fix unintended interception of NICK after registrationJune McEnroe 2020-08-12Add Additional Components section to READMEJune McEnroe 2020-08-12Document -L / palaver optionJune McEnroe 2020-08-11contrib/palaver: Document service configurationJune McEnroe 2020-08-11contrib/palaver: Add install target and rc scriptJune McEnroe 2020-08-11contrib/palaver: Implement command and notificationsJune McEnroe