aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2022-04-19 18:44:06 +0800
committerkaiwu <kaiwu2004@gmail.com>2022-04-19 18:44:06 +0800
commit73adf92fd06a5bb252c8a3e0e17b1221cae590cb (patch)
tree24c0b1942b707192cc6b3e4b600217624920aca8
parent48c40701db5a52fe7b80bc6eecca08c1447412b5 (diff)
downloadadvent-of-code-73adf92fd06a5bb252c8a3e0e17b1221cae590cb.tar.gz
advent-of-code-73adf92fd06a5bb252c8a3e0e17b1221cae590cb.zip
int computer
-rw-r--r--src/2019/day5/aoc.cpp14
-rw-r--r--src/2019/day5/aoc.h2
2 files changed, 13 insertions, 3 deletions
diff --git a/src/2019/day5/aoc.cpp b/src/2019/day5/aoc.cpp
index 33267b3..d1d7c4b 100644
--- a/src/2019/day5/aoc.cpp
+++ b/src/2019/day5/aoc.cpp
@@ -1,9 +1,9 @@
#include "aoc.h"
-#include <vector>
namespace aoc2019 {
-static int input = 1;
+static int* input = nullptr;
+static int input_sequence = 0;
void get_number(const char** pp, int* d) {
const char* p = *pp;
@@ -48,7 +48,7 @@ static size_t opt2(std::vector<int>& codes, std::vector<int>& outputs, size_t i,
}
static size_t opt3(std::vector<int>& codes, std::vector<int>& outputs, size_t i, int m1, int m2) {
- get(codes, 0, i + 1) = input;
+ get(codes, 0, i + 1) = *(input + input_sequence++);
return i + 2;
}
@@ -96,6 +96,14 @@ static void run(size_t i, std::vector<int>& codes, std::vector<int>& outputs) {
}
static int run(int i, std::vector<int> codes) {
+ input = &i;
+ input_sequence = 0;
+ std::vector<int> outputs;
+ run(0, codes, outputs);
+ return outputs[outputs.size() - 1];
+}
+
+int int_computer(int i[], std::vector<int> codes) {
input = i;
std::vector<int> outputs;
run(0, codes, outputs);
diff --git a/src/2019/day5/aoc.h b/src/2019/day5/aoc.h
index fea6fb9..5c0e50e 100644
--- a/src/2019/day5/aoc.h
+++ b/src/2019/day5/aoc.h
@@ -1,8 +1,10 @@
#pragma once
#include "common.h"
+#include <vector>
namespace aoc2019 {
+int int_computer(int i[], std::vector<int> codes);
std::pair<int, int> day5(line_view);
}