aboutsummaryrefslogtreecommitdiff
path: root/src/2018/day1/aoc.cpp
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2022-04-04 10:55:15 +0800
committerkaiwu <kaiwu2004@gmail.com>2022-04-04 10:55:15 +0800
commitdb6c4680263981594cacd464e4abfea38586b9d5 (patch)
tree1a83e4ce89b58ebb15afe7896020125c238c9d12 /src/2018/day1/aoc.cpp
parente3d42a551d838e3fef28a132912f33740095c20b (diff)
downloadadvent-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.cpp42
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