aboutsummaryrefslogtreecommitdiff
path: root/src/2020/day8/aoc.cpp
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2022-05-14 17:17:04 +0800
committerkaiwu <kaiwu2004@gmail.com>2022-05-14 17:17:04 +0800
commit1a9146ae65c309c1c4dafb57a08ffb25c632fa78 (patch)
tree25df8befca23799897ee0755f1be3e066db1f8ac /src/2020/day8/aoc.cpp
parent3063b07245326e11667d50eeed1eaa52b93b8f68 (diff)
downloadadvent-of-code-1a9146ae65c309c1c4dafb57a08ffb25c632fa78.tar.gz
advent-of-code-1a9146ae65c309c1c4dafb57a08ffb25c632fa78.zip
2020 day8 part1
Diffstat (limited to 'src/2020/day8/aoc.cpp')
-rw-r--r--src/2020/day8/aoc.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/2020/day8/aoc.cpp b/src/2020/day8/aoc.cpp
index 849bad9..830141a 100644
--- a/src/2020/day8/aoc.cpp
+++ b/src/2020/day8/aoc.cpp
@@ -1,5 +1,33 @@
#include "aoc.h"
+#include <vector>
namespace aoc2020 {
+static void run(size_t index, std::vector<code>& cs, int* accumlator) {
+ auto& code = cs[index];
+ if (code.executed == 0) {
+ size_t next = index + 1;
+ if (code.type == acc) {
+ *accumlator += code.value;
+ }
+ if (code.type == jmp) {
+ next = index + code.value;
+ }
+ code.executed += 1;
+ run(next, cs, accumlator);
+ }
}
+
+int day8(line_view file) {
+ std::vector<code> cs;
+ int accumlator = 0;
+ per_line(file, [&cs](line_view lv) {
+ cs.emplace_back(lv);
+ return true;
+ });
+
+ run(0, cs, &accumlator);
+ return accumlator;
+}
+
+} // namespace aoc2020