diff options
author | kaiwu <kaiwu2004@gmail.com> | 2022-03-19 19:33:10 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2022-03-19 19:33:10 +0800 |
commit | 9a5732aeb6d0966c70c73be76802eb039c65ea18 (patch) | |
tree | 3b046daad85c2f18799bdca1e4e2995362417901 /src/2015/day12/aoc.cpp | |
parent | 836266ad7d7215205d9563908106154408c4eef1 (diff) | |
download | advent-of-code-9a5732aeb6d0966c70c73be76802eb039c65ea18.tar.gz advent-of-code-9a5732aeb6d0966c70c73be76802eb039c65ea18.zip |
day12 done
Diffstat (limited to 'src/2015/day12/aoc.cpp')
-rw-r--r-- | src/2015/day12/aoc.cpp | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/2015/day12/aoc.cpp b/src/2015/day12/aoc.cpp index bdfa91a..8ffe7fa 100644 --- a/src/2015/day12/aoc.cpp +++ b/src/2015/day12/aoc.cpp @@ -40,8 +40,8 @@ int parse_range(line_view s) { int day12(line_view file) { return parse_range(file); } bool is_red(const char* p) { - static const char* red = "red"; - for (int i = 0; i < 3; i++) { + static const char* red = ":\"red"; + for (int i = 0; i < 5; i++) { if (p[i] != red[i]) { return false; } @@ -65,12 +65,13 @@ void fix_range(const char* p, const char** pe) { } void parse_range(const char* p1, const char* p2, int* total) { + // const char* p0 = p1; const char* p = p1; int sub = 0; - std::cout << line_view{p1 - 1, p2}; while (p != p2) { - if (*p == 'r' && is_red(p)) { + if (*p == ':' && is_red(p)) { sub = 0; + p1 = p; break; } if (*p == '{') { @@ -80,12 +81,14 @@ void parse_range(const char* p1, const char* p2, int* total) { parse_range(p + 1, pe, &sub); p1 = pe; p = pe; - } - else { + } else { p++; } } - std::cout << " sub:" << sub << std::endl; + if (p > p1) { + sub += parse_range({p1, p}); + } + // std::cout << line_view{p0 - 1, p2} << " sub:" << sub << std::endl; *total += sub; } @@ -105,7 +108,9 @@ int day12_part2(line_view file) { p++; } } - total += parse_range({p1, p}); + if (p > p1) { + total += parse_range({p1, p}); + } return total; } |