aboutsummaryrefslogtreecommitdiff
path: root/src/2020/day9/aoc.cpp
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2022-12-05 16:05:02 +0800
committerkaiwu <kaiwu2004@gmail.com>2022-12-05 16:05:02 +0800
commit2f828ddfb1f649f8ed53291bdaf9457c2f633f75 (patch)
treecb50b1edcd56cd7895fd71e8c6be2cbc0e1a75ef /src/2020/day9/aoc.cpp
parentc2820ed7b706a580bc60a74a0d2af806ca57f501 (diff)
downloadadvent-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.cpp62
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};
+}
}