aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2022-12-14 15:05:43 +0800
committerkaiwu <kaiwu2004@gmail.com>2022-12-14 15:05:43 +0800
commit6b36d30a067fbd01ed5f68c0791abfb2259f8868 (patch)
tree3f1a5a88131d6eb02df8b88fc2c56258a8fac7db /src
parent0be5a28f1373448194c1266ec33a7e5860e806d9 (diff)
downloadadvent-of-code-6b36d30a067fbd01ed5f68c0791abfb2259f8868.tar.gz
advent-of-code-6b36d30a067fbd01ed5f68c0791abfb2259f8868.zip
2022 day13
Diffstat (limited to 'src')
-rw-r--r--src/2022/day13/aoc.cpp16
-rw-r--r--src/2022/day13/aoc.h18
-rw-r--r--src/2022/day13/input18
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]]