aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2023-01-11 17:13:18 +0800
committerkaiwu <kaiwu2004@gmail.com>2023-01-11 17:13:18 +0800
commit4dcceb6cb95970f90bb1a981fc47b02c6a35f580 (patch)
tree4c819f4575152dc80166ced4e240983de608701f /src
parent4f950cb20871a91f75b1157413cfecb7b0ed7d66 (diff)
downloadadvent-of-code-4dcceb6cb95970f90bb1a981fc47b02c6a35f580.tar.gz
advent-of-code-4dcceb6cb95970f90bb1a981fc47b02c6a35f580.zip
2022 day16 part2 redesign
Diffstat (limited to 'src')
-rw-r--r--src/2022/day16/aoc.cpp57
1 files changed, 8 insertions, 49 deletions
diff --git a/src/2022/day16/aoc.cpp b/src/2022/day16/aoc.cpp
index ee2f409..d381b6e 100644
--- a/src/2022/day16/aoc.cpp
+++ b/src/2022/day16/aoc.cpp
@@ -102,29 +102,6 @@ void flow(int m, valve* v, std::map<valve*, int> opened, int os, int total, int*
}
}
-bool update(valve_m vs[2], valve_m n0, bool g0, bool m0, valve_m n1, bool g1, bool m1) {
- if (g0 && m0 && g1 && m1) {
- vs[0].m -= n0.m;
- vs[0].v = n0.v;
- vs[1].m -= n1.m;
- vs[1].v = n1.v;
- return true;
- }
- if (g0 && m0 && (!g1 || !m1)) {
- vs[0].m -= n0.m;
- vs[0].v = n0.v;
- vs[1].m -= vs[1].m > 0 ? 1 : 0;
- return true;
- }
- if ((!g0 || !m0) && g1 && m1) {
- vs[0].m -= vs[0].m > 0 ? 1 : 0;
- vs[1].m -= n1.m;
- vs[1].v = n1.v;
- return true;
- }
- return false;
-}
-
struct valve_mm {
valve_m vm1;
valve_m vm2;
@@ -138,9 +115,9 @@ void flow(valve_m vs[2], std::map<valve_mm, int>& visited, std::map<valve*, int>
for (auto i = 0; i < 2; i++) {
update_total(&total, opened, vs[i].m);
}
- if (vs[0].m == 0 && vs[1].m == 0) {
+ if (vs[0].m == 0 || vs[1].m == 0) {
if (*max < total) {
- printf("total is %d\n", total);
+ // printf("total is %d\n", total);
*max = total;
}
} else {
@@ -151,10 +128,10 @@ void flow(valve_m vs[2], std::map<valve_mm, int>& visited, std::map<valve*, int>
}
p.first->second = total;
}
- for (auto i = 0; i < 2; i++) {
- std::cout << i << " at " << vs[i].v->name << " when " << vs[i].m << " minutes left, total is " << total
- << std::endl;
- }
+ // for (auto i = 0; i < 2; i++) {
+ // std::cout << i << " at " << vs[i].v->name << " when " << vs[i].m << " minutes left, total is " << total
+ // << std::endl;
+ // }
if (os >= maxopened) {
vs[0].m -= vs[0].m > 0 ? 1 : 0;
vs[1].m -= vs[1].m > 0 ? 1 : 0;
@@ -174,26 +151,8 @@ void flow(valve_m vs[2], std::map<valve_mm, int>& visited, std::map<valve*, int>
vs[1].m -= vs[1].m > 0 ? 1 : 0;
flow(vs, visited, opened, os, total, max);
} else {
- auto& ns0 = diagram[vs[0].v];
- auto& ns1 = diagram[vs[1].v];
- for (auto& n0 : ns0) {
- auto g0 = !is_open(n0.v, opened);
- for (auto& n1 : ns1) {
- auto g1 = !is_open(n1.v, opened);
- if (n0.v != n1.v && (g0 || g1)) {
- valve_m vx[2];
- vx[0] = vs[0];
- vx[1] = vs[1];
-
- auto m0 = vx[0].m > n0.m;
- auto m1 = vx[1].m > n1.m;
- if (update(vx, n0, g0, m0, n1, g1, m1)) {
- auto v = visited;
- flow(vx, v, opened, os, total, max);
- }
- }
- }
- }
+ // auto& ns0 = diagram[vs[0].v];
+ // auto& ns1 = diagram[vs[1].v];
}
}
}