From db6c4680263981594cacd464e4abfea38586b9d5 Mon Sep 17 00:00:00 2001 From: kaiwu Date: Mon, 4 Apr 2022 10:55:15 +0800 Subject: 2018 day1 --- src/2018/day1/aoc.cpp | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) (limited to 'src/2018/day1/aoc.cpp') 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 -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 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 -- cgit v1.2.3