diff options
author | kaiwu <kaiwu2004@gmail.com> | 2022-12-13 23:48:00 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2022-12-13 23:48:00 +0800 |
commit | a5833a22d9cbf92f673e31696d24ba3f331050a4 (patch) | |
tree | 1584aa3c296fae78c6f985bbff0ac3de8938107a | |
parent | 77d97cc88f18dc83bd6059d7c02fe88492b001f8 (diff) | |
download | advent-of-code-a5833a22d9cbf92f673e31696d24ba3f331050a4.tar.gz advent-of-code-a5833a22d9cbf92f673e31696d24ba3f331050a4.zip |
2022 day13 part1
-rw-r--r-- | src/2022/day13/aoc.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/2022/day13/aoc.h b/src/2022/day13/aoc.h index cfd6a9a..d0749fc 100644 --- a/src/2022/day13/aoc.h +++ b/src/2022/day13/aoc.h @@ -2,6 +2,60 @@ #include <vector> namespace aoc2022 { + +struct packet { + enum componet_t { + is_int, + is_list, + }; + + struct componet { + componet_t t; + int v; + packet *p; + }; + + std::vector<componet*> ps; + + void get_number(const char** p, int* d) { + const char* p0 = *p; + while (*p0 >= '0' && *p0 <= '9') { + *d = 10 * (*d) + *p0 - '0'; + p0++; + } + *p = p0; + } + + void load(const char** p, packet** pp) { + const char* p0 = *p; + while (*p0 != '\n') { + if (*p0 >= '0' && *p0 <= '9') { + componet* c = new componet; + c->t = is_int; + get_number(&p0, &c->v); + c->p = nullptr; + (*pp)->ps.push_back(c); + } + else if (*p0 == '[') { + componet* c = new componet; + c->t = is_list; + c->p = new packet; + load(&p0, &c->p); + (*pp)->ps.push_back(c); + } + else if (*p0 == ']') { + *p = p0; + return; + } + p0++; + } + } + + friend bool operator<(const packet& p1, const packet& p2) { + return true; + } +}; + std::pair<int, int> day13(line_view); } |