diff options
Diffstat (limited to 'src/2022/day13/aoc.h')
-rw-r--r-- | src/2022/day13/aoc.h | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/src/2022/day13/aoc.h b/src/2022/day13/aoc.h index 7999e25..bfec96e 100644 --- a/src/2022/day13/aoc.h +++ b/src/2022/day13/aoc.h @@ -28,7 +28,7 @@ struct packet { static void load(const char** p, packet** pp) { const char* p0 = *p; - while (*p0 != '\n') { + while (*p0 != ']') { p0++; if (*p0 >= '0' && *p0 <= '9') { componet* c = new componet; @@ -40,14 +40,37 @@ struct packet { componet* c = new componet; c->t = is_list; c->p = new packet; - load(&p0, &c->p); (*pp)->ps.push_back(c); + load(&p0, &c->p); + } + } + *p = p0 + 1; + } + + char* indent (int s) { + static char space[100] = {0}; + memset(space, 0 ,100); + for(int i = 0; i < s; i++) { + space[i] = ' '; + } + return space; + }; + + void print(int d) { + printf("["); + int i{0}; + const char* s[] = {"", ","}; + for(componet* c : ps) { + if (c->t == is_int) { + printf("%s%d", s[(int) i > 0], c->v); + } + else { + printf("%s", s[(int) i > 0]); + c->p->print(d+1); } - else if (*p0 == ']') { - *p = p0; - return; - } + i++; } + printf("]"); } static packet* make_packet(int v) { |