diff options
author | kaiwu <kaiwu2004@gmail.com> | 2022-12-05 16:05:02 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2022-12-05 16:05:02 +0800 |
commit | 2f828ddfb1f649f8ed53291bdaf9457c2f633f75 (patch) | |
tree | cb50b1edcd56cd7895fd71e8c6be2cbc0e1a75ef /src/2020/day9/aoc.cpp | |
parent | c2820ed7b706a580bc60a74a0d2af806ca57f501 (diff) | |
download | advent-of-code-2f828ddfb1f649f8ed53291bdaf9457c2f633f75.tar.gz advent-of-code-2f828ddfb1f649f8ed53291bdaf9457c2f633f75.zip |
2022 day5
Diffstat (limited to 'src/2020/day9/aoc.cpp')
-rw-r--r-- | src/2020/day9/aoc.cpp | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/2020/day9/aoc.cpp b/src/2020/day9/aoc.cpp index 849bad9..c7a826f 100644 --- a/src/2020/day9/aoc.cpp +++ b/src/2020/day9/aoc.cpp @@ -1,5 +1,67 @@ #include "aoc.h" +#include <set> namespace aoc2020 { +static int numbers[1000] = {0}; + +static int get_number(const char* p) { + int d{0}; + while (*p >= '0' && *p <= '9') { + d = d * 10 + *p - '0'; + p++; + } + return d; +} + +bool check25(int i, int* weak) { + std::set<int> si; + for (int x = i - 25; x < i; x++) { + si.insert(numbers[x]); + } + for (int x = i - 25; x < i; x++) { + int y = numbers[i] - numbers[x]; + if (si.find(y) != si.end()) { + return true; + } + } + + *weak = numbers[i]; + return false; +} + +bool check_contiguous(int i, int* end, int target) { + return false; +} + +static void minmax(int x, int y, int* min, int* max) { + +} + +std::pair<int, int> day9(line_view file) { + int i{0}; + per_line(file, [&i](line_view lv){ + numbers[i++] = get_number(lv.line); + return true; + }); + + int weak{0}; + int pos{0}; + for (int i = 25; i < 1000; i++) { + if (!check25(i, &weak)) { + pos = i; + break; + } + } + + int e{0}; + int min{INT32_MAX}, max{INT32_MIN}; + for (int i = 0; i < pos; i++) { + if (check_contiguous(i, &e, weak)) { + minmax(i, e, &min, &max); + } + } + + return {weak, min + max}; +} } |