summary refs log tree commit diff homepage
path: root/src
diff options
context:
space:
mode:
authorJune McEnroe <programble@gmail.com>2016-12-03 22:21:12 -0500
committerJune McEnroe <programble@gmail.com>2016-12-03 22:21:12 -0500
commitae7815c1c6f5ed941ec8c5041ffe23cefd45d26f (patch)
tree4fce58e4f5e25d34085ac44f39b629b1740f88b8 /src
parentCargo init (diff)
downloadaoc-ae7815c1c6f5ed941ec8c5041ffe23cefd45d26f.tar.gz
aoc-ae7815c1c6f5ed941ec8c5041ffe23cefd45d26f.zip
Day 1 in Rust
Diffstat (limited to '')
-rw-r--r--src/bin/day01.rs56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/bin/day01.rs b/src/bin/day01.rs
index f79c691..ed2d845 100644
--- a/src/bin/day01.rs
+++ b/src/bin/day01.rs
@@ -1,2 +1,58 @@
+use std::io::{self, Read};
+use std::ops::{Add, Mul};
+
+#[derive(Clone, Copy)]
+struct Point(i32, i32);
+
+impl Point {
+    fn left(self) -> Self {
+        Point(self.1, -self.0)
+    }
+
+    fn right(self) -> Self {
+        Point(-self.1, self.0)
+    }
+
+    fn distance(self, other: Self) -> i32 {
+        (self.0 - other.0).abs() + (self.1 - other.1).abs()
+    }
+}
+
+impl Add for Point {
+    type Output = Self;
+
+    fn add(self, rhs: Self) -> Self {
+        Point(self.0 + rhs.0, self.1 + rhs.1)
+    }
+}
+
+impl Mul<i32> for Point {
+    type Output = Self;
+
+    fn mul(self, rhs: i32) -> Self {
+        Point(self.0 * rhs, self.1 * rhs)
+    }
+}
+
 fn main() {
+    let mut input = String::new();
+    io::stdin().read_to_string(&mut input).unwrap();
+
+    let mut position = Point(0, 0);
+    let mut direction = Point(0, -1);
+
+    for instruction in input.trim().split(", ") {
+        let (turn, count) = instruction.split_at(1);
+
+        if turn == "L" {
+            direction = direction.left();
+        } else {
+            direction = direction.right();
+        }
+
+        let count: i32 = count.parse().unwrap();
+        position = position + direction * count;
+    }
+
+    println!("Part 1: {}", position.distance(Point(0, 0)));
 }
0c59ecba4c1c74d619eb42f9b4f2c4d2acf198d&follow=1'>Make sure -D_GNU_SOURCE ends up in CFLAGS on LinuxJune McEnroe 2020-02-11Add note about setting PKG_CONFIG_PATHJune McEnroe 2020-02-11Rename query ID on nick changeJune McEnroe 2020-02-11Call completeClear when closing a windowJune McEnroe 2020-02-11Don't insert color codes for non-mentionsJune McEnroe 2020-02-11Take first two words in colorMentionsJune McEnroe This lets phrases like "hi june" get colored, but still doesn't get carried away. 2020-02-11Use time_t for save signatureJune McEnroe It's actually more likely to be 64-bit than size_t anyway, and it eliminates some helper functions. Also don't error when reading an empty save file. 2020-02-11Set self.nick to * initiallyJune McEnroe Allows removing a bunch of checks that self.nick is set, and it's what the server usually calls you before registration. Never highlight notices as mentions. 2020-02-11Define ColorCap instead of hardcoding 100June McEnroe 2020-02-11Move hash to top of chat.hJune McEnroe 2020-02-11Move base64 out of chat.hJune McEnroe 2020-02-11Move XDG_SUBDIR out of chat.hJune McEnroe 2020-02-11Fix whois idle unit calculationJune McEnroe Rookie mistake. 2020-02-11Cast towupper to wchar_tJune McEnroe For some reason it takes and returns wint_t... 2020-02-11Cast set but unused variables to voidJune McEnroe 2020-02-11Declare strlcatJune McEnroe 2020-02-11Check if VDSUSP existsJune McEnroe 2020-02-11Fix completeReplace iterationJune McEnroe 2020-02-11Use pkg(8) to configure on FreeBSDJune McEnroe 2020-02-11Remove legacy codeJune McEnroe 2020-02-11Add INSTALLING section to READMEJune McEnroe