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.h54
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);
}