aboutsummaryrefslogtreecommitdiff
path: root/src/2015/day12/aoc.cpp
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2022-03-19 19:33:10 +0800
committerkaiwu <kaiwu2004@gmail.com>2022-03-19 19:33:10 +0800
commit9a5732aeb6d0966c70c73be76802eb039c65ea18 (patch)
tree3b046daad85c2f18799bdca1e4e2995362417901 /src/2015/day12/aoc.cpp
parent836266ad7d7215205d9563908106154408c4eef1 (diff)
downloadadvent-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.cpp21
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;
}