diff options
author | kaiwu <kaiwu2004@gmail.com> | 2023-01-11 17:13:18 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2023-01-11 17:13:18 +0800 |
commit | 4dcceb6cb95970f90bb1a981fc47b02c6a35f580 (patch) | |
tree | 4c819f4575152dc80166ced4e240983de608701f /src | |
parent | 4f950cb20871a91f75b1157413cfecb7b0ed7d66 (diff) | |
download | advent-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.cpp | 57 |
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]; } } } |