aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2022-04-19 21:19:17 +0800
committerkaiwu <kaiwu2004@gmail.com>2022-04-19 21:19:17 +0800
commit7da1f98aaad6260d68ca0a819f0f7c5388b47a4d (patch)
tree17ccb62223ed0359005086d1935c26a970835eed /src
parentafdd58189c94f793d7bd892ec3f2f476b596b7fa (diff)
downloadadvent-of-code-7da1f98aaad6260d68ca0a819f0f7c5388b47a4d.tar.gz
advent-of-code-7da1f98aaad6260d68ca0a819f0f7c5388b47a4d.zip
2019 day7 part1
Diffstat (limited to 'src')
-rw-r--r--src/2019/day5/aoc.cpp4
-rw-r--r--src/2019/day5/aoc.h2
-rw-r--r--src/2019/day7/aoc.cpp60
-rw-r--r--src/2019/day7/aoc.h2
4 files changed, 65 insertions, 3 deletions
diff --git a/src/2019/day5/aoc.cpp b/src/2019/day5/aoc.cpp
index 844e400..0913e40 100644
--- a/src/2019/day5/aoc.cpp
+++ b/src/2019/day5/aoc.cpp
@@ -5,7 +5,7 @@ namespace aoc2019 {
static int* input = nullptr;
static int input_sequence = 0;
-void get_number(const char** pp, int* d) {
+static void get_number(const char** pp, int* d) {
const char* p = *pp;
int sign = 1;
if (*p == '-') {
@@ -101,7 +101,7 @@ static int run(int i, const std::vector<int>& codes) {
return run_computer(codes);
}
-void set_computer(int i[]) {
+void set_computer(int* i) {
input = i;
input_sequence = 0;
}
diff --git a/src/2019/day5/aoc.h b/src/2019/day5/aoc.h
index 2445f95..e226eb3 100644
--- a/src/2019/day5/aoc.h
+++ b/src/2019/day5/aoc.h
@@ -5,7 +5,7 @@
namespace aoc2019 {
-void set_computer(int i[]);
+void set_computer(int* i);
int run_computer(std::vector<int> codes);
std::pair<int, int> day5(line_view);
}
diff --git a/src/2019/day7/aoc.cpp b/src/2019/day7/aoc.cpp
index 593848b..c1a8ba5 100644
--- a/src/2019/day7/aoc.cpp
+++ b/src/2019/day7/aoc.cpp
@@ -1,4 +1,64 @@
#include "aoc.h"
+#include "../day5/aoc.h"
+#include <set>
namespace aoc2019 {
+
+void find_max(int* is, int i, std::set<int>& ns, int* max, const std::vector<int>& codes) {
+ if (i == 10) {
+ set_computer(&is[i - 2]);
+ int n = run_computer(codes);
+ if (n > *max) {
+ *max = n;
+ }
+ } else {
+ for (int x : {0, 1, 2, 3, 4}) {
+ if (ns.find(x) != ns.end()) {
+ continue;
+ } else {
+ is[i] = x;
+ if (i > 0) {
+ set_computer(&is[i - 2]);
+ is[i + 1] = run_computer(codes);
+ }
+ ns.insert(x);
+ find_max(is, i + 2, ns, max, codes);
+ ns.erase(x);
+ }
+ }
+ }
+}
+
+static void get_number(const char** pp, int* d) {
+ const char* p = *pp;
+ int sign = 1;
+ if (*p == '-') {
+ sign = -1;
+ p++;
+ }
+ while (*p >= '0' && *p <= '9') {
+ *d = *d * 10 + *p - '0';
+ p++;
+ }
+ *d *= sign;
+ *pp = p;
+}
+
+int day7(line_view file) {
+ int max{INT32_MIN};
+ int is[10] = {0};
+ std::set<int> ns;
+ std::vector<int> codes;
+ const char* p = file.line;
+ while (p < file.line + file.length) {
+ if ((*p >= '0' && *p <= '9') || *p == '-') {
+ int d{0};
+ get_number(&p, &d);
+ codes.push_back(d);
+ }
+ p++;
+ }
+ find_max(is, 0, ns, &max, codes);
+ return max;
}
+} // namespace aoc2019
diff --git a/src/2019/day7/aoc.h b/src/2019/day7/aoc.h
index d34e195..de34fe8 100644
--- a/src/2019/day7/aoc.h
+++ b/src/2019/day7/aoc.h
@@ -2,4 +2,6 @@
#include "common.h"
namespace aoc2019 {
+
+int day7(line_view);
}