aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2022-04-20 22:43:02 +0800
committerkaiwu <kaiwu2004@gmail.com>2022-04-20 22:43:02 +0800
commit09d7a8a34030b49d2316538949ad84668c42b8ca (patch)
tree265925b30e203685910e0de0393c992c10a2eba3
parentcf2fa8493234e8f66468793d9b4a7633c3704a14 (diff)
downloadadvent-of-code-09d7a8a34030b49d2316538949ad84668c42b8ca.tar.gz
advent-of-code-09d7a8a34030b49d2316538949ad84668c42b8ca.zip
loopback computer
-rw-r--r--src/2019/day5/aoc.cpp2
-rw-r--r--src/2019/day5/aoc.h1
-rw-r--r--src/2019/day7/aoc.cpp25
-rw-r--r--src/2019/day7/aoc.h2
-rw-r--r--test/test_2019.cpp12
5 files changed, 29 insertions, 13 deletions
diff --git a/src/2019/day5/aoc.cpp b/src/2019/day5/aoc.cpp
index 0913e40..d9c3cd0 100644
--- a/src/2019/day5/aoc.cpp
+++ b/src/2019/day5/aoc.cpp
@@ -112,6 +112,8 @@ int run_computer(std::vector<int> codes) {
return outputs[outputs.size() - 1];
}
+void run_computer(std::vector<int> codes, std::vector<int>& outputs) { run(0, codes, outputs); }
+
std::pair<int, int> day5(line_view file) {
const char* p = file.line;
std::vector<int> optcodes;
diff --git a/src/2019/day5/aoc.h b/src/2019/day5/aoc.h
index e226eb3..e92cd2e 100644
--- a/src/2019/day5/aoc.h
+++ b/src/2019/day5/aoc.h
@@ -7,5 +7,6 @@ namespace aoc2019 {
void set_computer(int* i);
int run_computer(std::vector<int> codes);
+void run_computer(std::vector<int> codes, std::vector<int>&);
std::pair<int, int> day5(line_view);
}
diff --git a/src/2019/day7/aoc.cpp b/src/2019/day7/aoc.cpp
index 176683a..d654a0c 100644
--- a/src/2019/day7/aoc.cpp
+++ b/src/2019/day7/aoc.cpp
@@ -1,5 +1,6 @@
#include "aoc.h"
#include "../day5/aoc.h"
+#include <algorithm>
#include <set>
namespace aoc2019 {
@@ -45,10 +46,7 @@ static void get_number(const char** pp, int* d) {
*pp = p;
}
-int day7(line_view file) {
- int max{INT32_MIN};
- int is[10] = {0};
- std::set<int> ns;
+std::pair<int, int> day7(line_view file) {
std::vector<int> codes;
const char* p = file.line;
while (p < file.line + file.length) {
@@ -59,7 +57,22 @@ int day7(line_view file) {
}
p++;
}
- find_max(is, 0, ns, &max, codes);
- return max;
+ int m1{INT32_MIN};
+ int is1[10] = {0};
+ std::set<int> ns1;
+ find_max(is1, 0, ns1, &m1, codes);
+
+ for (int i : {5, 6, 7, 8, 9}) {
+ int is2[10] = {0};
+ is2[0] = i;
+ is2[1] = 33;
+ set_computer(is2);
+ std::vector<int> outputs;
+ run_computer(codes, outputs);
+ std::for_each(outputs.begin(), outputs.end(), [](int x) { printf("%d ", x); });
+ printf("\n");
+ }
+
+ return {m1, 0};
}
} // namespace aoc2019
diff --git a/src/2019/day7/aoc.h b/src/2019/day7/aoc.h
index de34fe8..206e60c 100644
--- a/src/2019/day7/aoc.h
+++ b/src/2019/day7/aoc.h
@@ -3,5 +3,5 @@
namespace aoc2019 {
-int day7(line_view);
+std::pair<int, int> day7(line_view);
}
diff --git a/test/test_2019.cpp b/test/test_2019.cpp
index 4cb9aff..ef6c31e 100644
--- a/test/test_2019.cpp
+++ b/test/test_2019.cpp
@@ -51,10 +51,10 @@ TEST_CASE("Universal Orbit Map", "[2019]") {
TEST_CASE("Amplification Circuit", "[2019]") {
line_view lv = load_file("../src/2019/day7/input");
- REQUIRE(272368 == aoc2019::day7(lv));
- // clang-format off
- // REQUIRE(43210 == aoc2019::day7(line_view{"3,15,3,16,1002,16,10,16,1,16,15,15,4,15,99,0,0"}));
- // REQUIRE(54321 == aoc2019::day7(line_view{"3,23,3,24,1002,24,10,24,1002,23,-1,23,101,5,23,23,1,24,23,23,4,23,99,0,0"}));
- // REQUIRE(65210 == aoc2019::day7(line_view{"3,31,3,32,1002,32,10,32,1001,31,-2,31,1007,31,0,33,1002,33,7,33,1,33,31,31,1,32,31,31,4,31,99,0,0,0"}));
- // clang-format on
+ auto p = aoc2019::day7(lv);
+ // REQUIRE(272368 == p.first);
+ // REQUIRE(0 == p.second);
+ // auto p = aoc2019::day7("3,26,1001,26,-4,26,3,27,1002,27,2,27,1,27,26,27,4,27,1001,28,-1,28,1005,28,6,99,0,0,5");
+ // auto p = aoc2019::day7("3,52,1001,52,-5,52,3,53,1,52,56,54,1007,54,5,55,1005,55,26,1001,54,-5,54,1105,1,12,1,53,54,53,1008,54,0,55,1001,55,1,55,2,53,55,53,4,53,1001,56,-1,56,1005,56,6,99,0,0,0,0,10");
+ REQUIRE(0 == p.second);
}