aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2022-12-13 23:48:00 +0800
committerkaiwu <kaiwu2004@gmail.com>2022-12-13 23:48:00 +0800
commita5833a22d9cbf92f673e31696d24ba3f331050a4 (patch)
tree1584aa3c296fae78c6f985bbff0ac3de8938107a
parent77d97cc88f18dc83bd6059d7c02fe88492b001f8 (diff)
downloadadvent-of-code-a5833a22d9cbf92f673e31696d24ba3f331050a4.tar.gz
advent-of-code-a5833a22d9cbf92f673e31696d24ba3f331050a4.zip
2022 day13 part1
-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);
}