summary refs log tree commit diff homepage
path: root/2017/src/bin/day11.rs
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2017-12-15 14:58:34 -0500
committerJune McEnroe <june@causal.agency>2020-11-22 00:14:25 -0500
commit9c03cb50c386189dcbbc438a09c618aa7fd4555c (patch)
tree2f8d499adade850dffe20ee92e2c9b96ee21369c /2017/src/bin/day11.rs
parentDay 10, part 2 (diff)
downloadaoc-9c03cb50c386189dcbbc438a09c618aa7fd4555c.tar.gz
aoc-9c03cb50c386189dcbbc438a09c618aa7fd4555c.zip
Day 11
https://www.redblobgames.com/grids/hexagons/#coordinates-cube
Diffstat (limited to '')
-rw-r--r--2017/src/bin/day11.rs42
1 files changed, 42 insertions, 0 deletions
diff --git a/2017/src/bin/day11.rs b/2017/src/bin/day11.rs
new file mode 100644
index 0000000..174f950
--- /dev/null
+++ b/2017/src/bin/day11.rs
@@ -0,0 +1,42 @@
+use std::io::{self, Read};
+
+#[derive(Debug, Clone, Copy)]
+struct Hex(i32, i32, i32);
+
+impl Hex {
+    fn mov(self, dir: &str) -> Self {
+        let Hex(x, y, z) = self;
+        match dir {
+            "n"  => Hex(x, y + 1, z - 1),
+            "ne" => Hex(x + 1, y, z - 1),
+            "se" => Hex(x + 1, y - 1, z),
+            "s"  => Hex(x, y - 1, z + 1),
+            "sw" => Hex(x - 1, y, z + 1),
+            "nw" => Hex(x - 1, y + 1, z),
+            _ => unimplemented!(),
+        }
+    }
+}
+
+fn solve1(input: &str) -> i32 {
+    let mut hex = Hex(0, 0, 0);
+    for dir in input.split(',') {
+        hex = hex.mov(dir);
+    }
+    (hex.0.abs() + hex.1.abs() + hex.2.abs()) / 2
+}
+
+fn main() {
+    let mut input = String::new();
+    io::stdin().read_to_string(&mut input).unwrap();
+
+    println!("Part 1: {}", solve1(input.trim()));
+}
+
+#[test]
+fn part1() {
+    assert_eq!(3, solve1("ne,ne,ne"));
+    assert_eq!(0, solve1("ne,ne,sw,sw"));
+    assert_eq!(2, solve1("ne,ne,s,s"));
+    assert_eq!(3, solve1("se,sw,se,sw,sw"));
+}