aboutsummaryrefslogtreecommitdiff
path: root/src/2022/day13/aoc.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/2022/day13/aoc.h')
-rw-r--r--src/2022/day13/aoc.h35
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) {