diff options
author | kaiwu <kaiwu2004@gmail.com> | 2022-12-14 15:05:43 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2022-12-14 15:05:43 +0800 |
commit | 6b36d30a067fbd01ed5f68c0791abfb2259f8868 (patch) | |
tree | 3f1a5a88131d6eb02df8b88fc2c56258a8fac7db /src | |
parent | 0be5a28f1373448194c1266ec33a7e5860e806d9 (diff) | |
download | advent-of-code-6b36d30a067fbd01ed5f68c0791abfb2259f8868.tar.gz advent-of-code-6b36d30a067fbd01ed5f68c0791abfb2259f8868.zip |
2022 day13
Diffstat (limited to 'src')
-rw-r--r-- | src/2022/day13/aoc.cpp | 16 | ||||
-rw-r--r-- | src/2022/day13/aoc.h | 18 | ||||
-rw-r--r-- | src/2022/day13/input1 | 8 |
3 files changed, 29 insertions, 13 deletions
diff --git a/src/2022/day13/aoc.cpp b/src/2022/day13/aoc.cpp index f844116..070f0cd 100644 --- a/src/2022/day13/aoc.cpp +++ b/src/2022/day13/aoc.cpp @@ -14,14 +14,14 @@ std::pair<int, int> find(const std::vector<pkt>& ps) { size_t s2 = ps.size() - 2; size_t a{0}, b{0}; for(size_t i = 0; i < ps.size(); i++) { - if (ps[i].i == s1) a = i; - if (ps[i].i == s2) b = i; - printf("%zu :", i); - ps[i].p->print(0); - printf("\n"); + if (ps[i].i == s1) a = i + 1; + if (ps[i].i == s2) b = i + 1; + // printf("%zu %zu:", i + 1, ps[i].i); + // ps[i].p->print(0); + // printf("\n"); } - printf("%zu %zu\n", a, b); - return {a + 1, b + 1}; + // printf("%zu %zu\n", a, b); + return {a, b}; } std::pair<int, int> day13(line_view file) { @@ -40,7 +40,7 @@ std::pair<int, int> day13(line_view file) { packet::load(&p, &ps[i]); all.push_back({pkt, (size_t) pair}); if (i == 1 && *(ps[0]) < *(ps[1])) { - printf("group[%d] is in right order\n", pair/2 + 1); + // printf("group[%d] is in right order\n", pair/2 + 1); count += pair / 2 + 1; } pair += 1; diff --git a/src/2022/day13/aoc.h b/src/2022/day13/aoc.h index bfec96e..4a705eb 100644 --- a/src/2022/day13/aoc.h +++ b/src/2022/day13/aoc.h @@ -88,23 +88,31 @@ struct packet { componet* c1 = p1.ps[i]; componet* c2 = p2.ps[i]; if (c1->t == is_int && c2->t == is_int) { - // printf("compare %d %d\n", c1->v, c2->v); if (c1->v < c2->v) return true; if (c1->v > c2->v) return false; } if (c1->t == is_int && c2->t == is_list) { packet *p = make_packet(c1->v); - return *p < *(c2->p); + bool b1 = *p < *(c2->p); + if (b1) return true; + bool b2 = *(c2->p) < *p; + if (b2) return false; } if (c1->t == is_list && c2->t == is_int) { packet *p = make_packet(c2->v); - return *(c1->p) < *(p); + bool b1 = *(c1->p) < *(p); + if (b1) return true; + bool b2 = *p < *(c1->p); + if (b2) return false; } if (c1->t == is_list && c2->t == is_list) { - return *(c1->p) < *(c2->p); + bool b1 = *(c1->p) < *(c2->p); + if (b1) return true; + bool b2 = *(c2->p) < *(c1->p); + if (b2) return false;; } } - return p1.ps.size() <= p2.ps.size(); + return p1.ps.size() < p2.ps.size(); } }; diff --git a/src/2022/day13/input1 b/src/2022/day13/input1 new file mode 100644 index 0000000..6d1b974 --- /dev/null +++ b/src/2022/day13/input1 @@ -0,0 +1,8 @@ +[[2]] +[[2],[[10,0],[[3,8,7,1]],[[8,6,9],[8,7,10,10],0,[1,1,6,6,8]],[[],0]]] + +[[[2],0,[[5,10,10],0,8,[2,5,1]],[5,[1,9,5,2,7],9,7],7],[],[10,[],1],[[[6,10,10,0],3,[8],6],[]]] +[[[2],[[5]],[],9],[[[8,6,4,6],[7,4]],[6],3,[4,[10,2],5,[2,4,0]]],[[3,10]]] + +[[2],[9,6],[[[2],5,0],[],[10,1],[7,[7,7,5]]],[[6,[2,10],3,[1,10,6,5],5],[1,[2,10,7,10],4]]] +[[2],[5],[2],[6],[4,0]] |