summary refs log tree commit diff homepage
path: root/src/bin
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/bin
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)));
 }
/td> 2021-01-12Avoid matching tag text inside HTML elementsJune McEnroe 2021-01-12Use hilex for up -hJune McEnroe 2021-01-12Use hilex for bin HTMLJune McEnroe 2021-01-12Don't output a pre in hilex by defaultJune McEnroe 2021-01-12Move hilex out of hilex directoryJune McEnroe 2021-01-12Consolidate hilex formatters into hilex.cJune McEnroe 2021-01-12Remove hacky tagging from hilexJune McEnroe God that makes the lexers so much simpler. 2021-01-12Add htagml -iJune McEnroe 2021-01-12Render tag index in HTMLJune McEnroe 2021-01-12Add htagml -xJune McEnroe 2021-01-12Prevent matching the same tag twiceJune McEnroe 2021-01-12Process htagml file line by lineJune McEnroe This simplifies some things, adds support for line number tag definitions, and should enable combining htagml with other preprocessors in the future. 2021-01-12Split fields by tab onlyJune McEnroe Also don't fail hard on non-forward-search definitions. 2021-01-12List both Makefile and html.sh under README.7June McEnroe 2021-01-12Add htagml exampleJune McEnroe 2021-01-12Use mandoc and htagml for bin htmlJune McEnroe 2021-01-12Add htagmlJune McEnroe 2021-01-12Replace causal.agency with a simple mdoc pageJune McEnroe 2021-01-11Publish "Using vi"June McEnroe 2021-01-11Enable diff.colorMovedJune McEnroe 2021-01-10Set less search case-insensitiveJune McEnroe 2021-01-10Set EXINITJune McEnroe neovim is laggy as hell in my OpenBSD VM, so I switched to vi so I could type without getting frustrated. 2021-01-09Add c -t flag to print expression typeJune McEnroe Also add missing float case. 2021-01-05Update taglineJune McEnroe