diff options
author | kaiwu <kaiwu2004@gmail.com> | 2022-04-03 19:52:39 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2022-04-03 19:52:39 +0800 |
commit | cc9343b7b24141a0d79e1e85969df9a7446585f8 (patch) | |
tree | 02f113eeaec6fe3ed82a933e9f3fc1a23f730823 /src/2016/day1/aoc.cpp | |
parent | 3ff3329e83a7c02be67dac2610ca7a85d5a7d455 (diff) | |
download | advent-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.cpp | 36 |
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 |