diff options
author | kaiwu <kaiwu2004@gmail.com> | 2022-05-06 17:51:22 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2022-05-06 17:51:22 +0800 |
commit | dde34a27133632aa7892eb4533890aea5ea04efb (patch) | |
tree | ebf708f7b9ffa63b5b35ed33171a4597879f482a | |
parent | 751c279cefea73b01f6f2457b9c65477d6f2df8d (diff) | |
download | advent-of-code-dde34a27133632aa7892eb4533890aea5ea04efb.tar.gz advent-of-code-dde34a27133632aa7892eb4533890aea5ea04efb.zip |
2021 day7
-rw-r--r-- | src/2021/day7/aoc.cpp | 34 | ||||
-rw-r--r-- | src/2021/day7/aoc.h | 2 | ||||
-rw-r--r-- | test/test_2021.cpp | 6 |
3 files changed, 27 insertions, 15 deletions
diff --git a/src/2021/day7/aoc.cpp b/src/2021/day7/aoc.cpp index 6ba7c29..8bc4607 100644 --- a/src/2021/day7/aoc.cpp +++ b/src/2021/day7/aoc.cpp @@ -12,17 +12,24 @@ static void get_number(const char** pp, int* d) { *pp = p; } -int fuel(int a, const std::map<int, int>& is) { - int total{0}; +int crab_move(int x, int y) { + int b = std::abs(x - y); + return b * (b + 1) / 2; +} + +std::pair<int, int> fuel(int a, const std::map<int, int>& is) { + int t0{0}; + int t1{0}; for (auto& kv : is) { if (kv.first != a) { - total += std::abs(a - kv.first) * kv.second; + t0 += std::abs(a - kv.first) * kv.second; + t1 += crab_move(a, kv.first) * kv.second; } } - return total; + return {t0, t1}; } -int day7(line_view file) { +std::pair<int, int> day7(line_view file) { std::map<int, int> is; const char* p1 = file.line; const char* p2 = p1 + file.length; @@ -39,16 +46,19 @@ int day7(line_view file) { p1++; } - int min{INT32_MAX}; + int m1{INT32_MAX}; + int m2{INT32_MAX}; for (int i = mi; i <= mx; i++) { - int f = fuel(i, is); - // printf("%d -> %d\n", i, f); - if (f < min) { - min = f; + auto p = fuel(i, is); + // printf("%d -> (%d, %d)\n", i, p.first, p.second); + if (p.first < m1) { + m1 = p.first; + } + if (p.second < m2) { + m2 = p.second; } } - - return min; + return {m1, m2}; } } // namespace aoc2021 diff --git a/src/2021/day7/aoc.h b/src/2021/day7/aoc.h index 72234fe..6dd69b6 100644 --- a/src/2021/day7/aoc.h +++ b/src/2021/day7/aoc.h @@ -3,5 +3,5 @@ namespace aoc2021 { -int day7(line_view); +std::pair<int, int> day7(line_view); } diff --git a/test/test_2021.cpp b/test/test_2021.cpp index 405bf03..173542b 100644 --- a/test/test_2021.cpp +++ b/test/test_2021.cpp @@ -56,6 +56,8 @@ TEST_CASE("Lanternfish", "[2021]") { TEST_CASE("The Treachery of Whales", "[2021]") { line_view lv = load_file("../src/2021/day7/input"); - // REQUIRE(37 == aoc2021::day7("16,1,2,0,4,2,7,1,2,14")); - REQUIRE(354129 == aoc2021::day7(lv)); + // auto p = aoc2021::day7("16,1,2,0,4,2,7,1,2,14"); + auto p = aoc2021::day7(lv); + REQUIRE(354129 == p.first); + REQUIRE(98905973 == p.second); } |