diff options
author | kaiwu <kaiwu2004@gmail.com> | 2022-04-10 09:28:48 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2022-04-10 09:28:48 +0800 |
commit | 89e08b832f434572d5edc8cb27322040331936a5 (patch) | |
tree | 100898b51d4a467507b54597d238684b8d19a13a /src/2021/day4/aoc.cpp | |
parent | 5aefb9f9373deb7f9947d888934f1f59c70ff2b5 (diff) | |
download | advent-of-code-89e08b832f434572d5edc8cb27322040331936a5.tar.gz advent-of-code-89e08b832f434572d5edc8cb27322040331936a5.zip |
search bingo
Diffstat (limited to 'src/2021/day4/aoc.cpp')
-rw-r--r-- | src/2021/day4/aoc.cpp | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/src/2021/day4/aoc.cpp b/src/2021/day4/aoc.cpp index 6853b9f..c38a019 100644 --- a/src/2021/day4/aoc.cpp +++ b/src/2021/day4/aoc.cpp @@ -63,7 +63,7 @@ int search(int n, bingo& b) { struct board { bnum is[25]; - int at; + bnum at; board(line_view lv, bingo* b) { const char* p = lv.line; @@ -92,13 +92,13 @@ struct board { printf(" "); } } - printf("\n"); + printf("-> %d %d\n", at.i, at.v); } - int sum_unmarked() { + int sum_unmarked(int x) { int s{0}; for (auto& n : is) { - if (n.i == INT32_MAX) { + if (n.i > x) { s += n.v; } } @@ -106,42 +106,46 @@ struct board { } bool operator<(const board& b) const noexcept { return at < b.at; } - int bingo_at() const noexcept { - int b{INT32_MAX}; + bnum bingo_at() const noexcept { + bnum b{INT32_MAX, 0}; - auto is_bingo_r = [this](int y) -> int { + auto is_bingo_r = [this](int y) -> bnum { int m{INT32_MIN}; + int v{0}; for (int x : {0, 1, 2, 3, 4}) { auto p = is[y * 5 + x].i; if (p == INT32_MAX) { - return INT32_MAX; + return {INT32_MAX, v}; } else { if (p > m) { m = p; + v = is[y * 5 + x].v; } } } - return m; + return {m, v}; }; - auto is_bingo_c = [this](int x) -> int { + auto is_bingo_c = [this](int x) -> bnum { int m{INT32_MIN}; + int v{0}; for (int y : {0, 1, 2, 3, 4}) { auto p = is[y * 5 + x].i; if (p == INT32_MAX) { - return INT32_MAX; + return {INT32_MAX, v}; } else { if (p > m) { m = p; + v = is[y * 5 + x].v; } } } - return m; + return {m, v}; }; for (int i : {0, 1, 2, 3, 4}) { - int b1 = is_bingo_r(i); - int b2 = is_bingo_c(i); + bnum b1 = is_bingo_r(i); + bnum b2 = is_bingo_c(i); b = std::min(b, std::min(b1, b2)); } @@ -169,7 +173,7 @@ int day4(line_view file) { bs.emplace_back(line_view{p1, p}, &b); std::sort(bs.begin(), bs.end()); - printf("%d\n", bs[0].sum_unmarked()); + printf("%d\n", bs[0].sum_unmarked(bs[0].at.i)); return 0; } |