diff options
author | kaiwu <kaiwu2004@gmail.com> | 2022-04-19 21:19:17 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2022-04-19 21:19:17 +0800 |
commit | 7da1f98aaad6260d68ca0a819f0f7c5388b47a4d (patch) | |
tree | 17ccb62223ed0359005086d1935c26a970835eed /src | |
parent | afdd58189c94f793d7bd892ec3f2f476b596b7fa (diff) | |
download | advent-of-code-7da1f98aaad6260d68ca0a819f0f7c5388b47a4d.tar.gz advent-of-code-7da1f98aaad6260d68ca0a819f0f7c5388b47a4d.zip |
2019 day7 part1
Diffstat (limited to 'src')
-rw-r--r-- | src/2019/day5/aoc.cpp | 4 | ||||
-rw-r--r-- | src/2019/day5/aoc.h | 2 | ||||
-rw-r--r-- | src/2019/day7/aoc.cpp | 60 | ||||
-rw-r--r-- | src/2019/day7/aoc.h | 2 |
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); } |