aboutsummaryrefslogtreecommitdiff
path: root/src/2020
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2022-04-04 17:30:57 +0800
committerkaiwu <kaiwu2004@gmail.com>2022-04-04 17:30:57 +0800
commitd3c489ff893b852f656c69e2c9e727bab35c4b8f (patch)
tree5f1d6802ca132d999198e0dcfc3b670b97ea1d3d /src/2020
parent2e43f7c284d47ac66041ae6318d975aca6b71c83 (diff)
downloadadvent-of-code-d3c489ff893b852f656c69e2c9e727bab35c4b8f.tar.gz
advent-of-code-d3c489ff893b852f656c69e2c9e727bab35c4b8f.zip
2020 day1
Diffstat (limited to 'src/2020')
-rw-r--r--src/2020/day1/aoc.cpp24
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