aboutsummaryrefslogtreecommitdiff
path: root/src/2016/day1/aoc.cpp
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2022-04-03 19:52:39 +0800
committerkaiwu <kaiwu2004@gmail.com>2022-04-03 19:52:39 +0800
commitcc9343b7b24141a0d79e1e85969df9a7446585f8 (patch)
tree02f113eeaec6fe3ed82a933e9f3fc1a23f730823 /src/2016/day1/aoc.cpp
parent3ff3329e83a7c02be67dac2610ca7a85d5a7d455 (diff)
downloadadvent-of-code-cc9343b7b24141a0d79e1e85969df9a7446585f8.tar.gz
advent-of-code-cc9343b7b24141a0d79e1e85969df9a7446585f8.zip
2016 day1 part1
Diffstat (limited to 'src/2016/day1/aoc.cpp')
-rw-r--r--src/2016/day1/aoc.cpp36
1 files changed, 35 insertions, 1 deletions
diff --git a/src/2016/day1/aoc.cpp b/src/2016/day1/aoc.cpp
index 014f893..2711d8f 100644
--- a/src/2016/day1/aoc.cpp
+++ b/src/2016/day1/aoc.cpp
@@ -1,3 +1,37 @@
#include "aoc.h"
-namespace aoc2016 {}
+namespace aoc2016 {
+
+instruction parse_day1(const char** pp) {
+ instruction i;
+ const char* p = *pp;
+ i.direction = (*p++) == 'R' ? instruction::right : instruction::left;
+ i.distance = 0;
+
+ while (*p >= '0' && *p <= '9') {
+ i.distance = i.distance * 10 + *p - '0';
+ p++;
+ }
+
+ *pp = p;
+ return i;
+}
+
+int day1(line_view file) {
+ position x{position::north, 0, 0};
+ std::vector<instruction> is;
+
+ const char* p1 = file.line;
+ const char* p2 = file.line + file.length;
+ while (p1 < p2) {
+ if (*p1 == 'R' || *p1 == 'L') {
+ is.emplace_back(parse_day1(&p1));
+ } else {
+ p1++;
+ }
+ }
+ position n = x.move(is);
+ return x.blocks(n);
+}
+
+} // namespace aoc2016