diff options
author | kaiwu <kaiwu2004@gmail.com> | 2022-04-04 10:55:15 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2022-04-04 10:55:15 +0800 |
commit | db6c4680263981594cacd464e4abfea38586b9d5 (patch) | |
tree | 1a83e4ce89b58ebb15afe7896020125c238c9d12 /src/2018/day1/aoc.cpp | |
parent | e3d42a551d838e3fef28a132912f33740095c20b (diff) | |
download | advent-of-code-db6c4680263981594cacd464e4abfea38586b9d5.tar.gz advent-of-code-db6c4680263981594cacd464e4abfea38586b9d5.zip |
2018 day1
Diffstat (limited to 'src/2018/day1/aoc.cpp')
-rw-r--r-- | src/2018/day1/aoc.cpp | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/src/2018/day1/aoc.cpp b/src/2018/day1/aoc.cpp index 1d092ff..aea1e97 100644 --- a/src/2018/day1/aoc.cpp +++ b/src/2018/day1/aoc.cpp @@ -1,3 +1,43 @@ #include "aoc.h" +#include <set> -namespace aoc2018 {} +namespace aoc2018 { +int parse_day1(line_view lv) { + const char* p = lv.line; + int sign = *p++ == '+' ? 1 : -1; + int s{0}; + while (*p >= '0' && *p <= '9') { + s = s * 10 + *p - '0'; + p++; + } + return sign * s; +} + +int day1(line_view file) { + int sum{0}; + + per_line(file, [&sum](line_view lv) { + sum += parse_day1(lv); + return true; + }); + return sum; +} + +int day1part2(line_view file) { + std::set<int> frequencies; + + int f{0}; + bool found{false}; + while (!found) { + per_line(file, [&f, &frequencies, &found](line_view lv) { + f += parse_day1(lv); + // printf("%d\n", f); + auto p = frequencies.insert(f); + found = !p.second; + return p.second; + }); + } + return f; +} + +} // namespace aoc2018 |