aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2022-05-22 11:37:12 +0800
committerkaiwu <kaiwu2004@gmail.com>2022-05-22 11:37:12 +0800
commit0e98b4f87e2d1bf79320769a7bcf1d61a6c99532 (patch)
tree7d67c42a68b69c08501cdf2c16aecf67e3dfe4ea /src
parent7e9d89e4c7549a7f7088340a24055caf09f758e8 (diff)
downloadadvent-of-code-0e98b4f87e2d1bf79320769a7bcf1d61a6c99532.tar.gz
advent-of-code-0e98b4f87e2d1bf79320769a7bcf1d61a6c99532.zip
2016 day9 part1
Diffstat (limited to 'src')
-rw-r--r--src/2016/day9/aoc.cpp48
-rw-r--r--src/2016/day9/aoc.h1
2 files changed, 49 insertions, 0 deletions
diff --git a/src/2016/day9/aoc.cpp b/src/2016/day9/aoc.cpp
index 55f4247..4f741d5 100644
--- a/src/2016/day9/aoc.cpp
+++ b/src/2016/day9/aoc.cpp
@@ -2,4 +2,52 @@
namespace aoc2016 {
+static void get_number(const char** pp, int* d) {
+ const char* p = *pp;
+ *d = 0;
+ while (*p >= '0' && *p <= '9') {
+ *d = *d * 10 + *p - '0';
+ p++;
+ }
+ *pp = p;
}
+
+static void check(const char** pp, int* t) {
+ int d[2] = {0};
+ const char* p = *pp;
+ int i = 0;
+ while (*p != ')') {
+ if (*p >= '0' && *p <= '9') {
+ get_number(&p, d + i++);
+ }
+ if (*p == '(' || *p == 'x') {
+ p++;
+ }
+ }
+ p += d[0];
+ *t += d[1] * d[0];
+ *pp = p;
+}
+
+int day9(line_view file) {
+ int t0{0};
+
+ const char* p1 = file.line;
+ const char* p2 = p1 + file.length - 1;
+ const char* p = p1;
+
+ while (p < p2) {
+ if (*p == '(') {
+ check(&p, &t0);
+ p++;
+ } else {
+ if (*p != ' ') {
+ t0++;
+ }
+ p++;
+ }
+ }
+ return t0;
+}
+
+} // namespace aoc2016
diff --git a/src/2016/day9/aoc.h b/src/2016/day9/aoc.h
index 95823fe..ab6a78c 100644
--- a/src/2016/day9/aoc.h
+++ b/src/2016/day9/aoc.h
@@ -3,4 +3,5 @@
namespace aoc2016 {
+int day9(line_view);
}