diff options
author | kaiwu <kaiwu2004@gmail.com> | 2022-04-04 17:30:57 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2022-04-04 17:30:57 +0800 |
commit | d3c489ff893b852f656c69e2c9e727bab35c4b8f (patch) | |
tree | 5f1d6802ca132d999198e0dcfc3b670b97ea1d3d /src/2020 | |
parent | 2e43f7c284d47ac66041ae6318d975aca6b71c83 (diff) | |
download | advent-of-code-d3c489ff893b852f656c69e2c9e727bab35c4b8f.tar.gz advent-of-code-d3c489ff893b852f656c69e2c9e727bab35c4b8f.zip |
2020 day1
Diffstat (limited to 'src/2020')
-rw-r--r-- | src/2020/day1/aoc.cpp | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/2020/day1/aoc.cpp b/src/2020/day1/aoc.cpp index ab8e2f4..9332c79 100644 --- a/src/2020/day1/aoc.cpp +++ b/src/2020/day1/aoc.cpp @@ -1,5 +1,6 @@ #include "aoc.h" #include <set> +#include <utility> #include <vector> namespace aoc2020 { @@ -13,20 +14,29 @@ int get_number(const char* p) { return d; } -int two_sum(const std::vector<int>& is, int target) { +int two_sum(int* is, size_t s, int target) { std::set<int> pairs; - for (auto i : is) { - auto it = pairs.find(i); + for (size_t i = 0; i < s; i++) { + auto it = pairs.find(is[i]); if (it == pairs.end()) { - pairs.insert(target - i); + pairs.insert(target - is[i]); } else { - return i * (target - *it); + return is[i] * (target - *it); } }; return 0; } -int three_sum(const std::vector<int>& is, int target) { return 0; } +int three_sum(std::vector<int>& is, int target) { + for (size_t i = 0; i < is.size(); i++) { + std::swap(is[0], is[i]); + int x = two_sum(&is[1], is.size() - 1, target - is[0]); + if (x > 0) { + return is[0] * x; + } + } + return 0; +} std::pair<int, int> day1(line_view file, int target) { std::vector<int> is; @@ -34,7 +44,7 @@ std::pair<int, int> day1(line_view file, int target) { is.emplace_back(get_number(lv.line)); return true; }); - return {two_sum(is, target), three_sum(is, target)}; + return {two_sum(is.data(), is.size(), target), three_sum(is, target)}; } } // namespace aoc2020 |