diff options
author | kaiwu <kaiwu2004@gmail.com> | 2023-02-06 14:46:22 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2023-02-06 14:46:22 +0800 |
commit | 99b5cc53a9b1e8860fc8ffdc0a91398513a1fc5a (patch) | |
tree | 5b541777050298c3a3af2934b8c7110600f23ad4 /src/2016/day23/aoc.cpp | |
parent | a8ba24a058c7026491e212d25d806a7359c33176 (diff) | |
download | advent-of-code-99b5cc53a9b1e8860fc8ffdc0a91398513a1fc5a.tar.gz advent-of-code-99b5cc53a9b1e8860fc8ffdc0a91398513a1fc5a.zip |
2016 day25
Diffstat (limited to 'src/2016/day23/aoc.cpp')
-rw-r--r-- | src/2016/day23/aoc.cpp | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/src/2016/day23/aoc.cpp b/src/2016/day23/aoc.cpp index 2a73886..a3b9b74 100644 --- a/src/2016/day23/aoc.cpp +++ b/src/2016/day23/aoc.cpp @@ -3,6 +3,7 @@ namespace aoc2016 { static int registers[4] = {7, 0, 0, 0}; +static size_t clock_signal = 0; static int& get(int i) { return registers[i]; } // c = a,b,c,d @@ -29,10 +30,12 @@ struct instruction23 { return toggle_is_odd ? 0 : 3; case 't': return toggle_is_odd ? 1 : 4; + case 'o': + return toggle_is_odd ? 1 : 5; default: break; } - return 5; + return 6; } }; @@ -77,6 +80,19 @@ static void dec(size_t* i, const char* p, const std::vector<instruction23>& todo *i += 1; } +static void out(size_t* i, const char* p, const std::vector<instruction23>& todos) { + + if (get(*p) == static_cast<int>(clock_signal & 1)) { + *i += 1; + clock_signal += 1; + } + else { + printf("%zu\n", clock_signal); + // printf("%d %d %d %d\n", get('a'), get('b'), get('c'), get('d')); + *i = UINT64_MAX; + } +} + static void jnz(size_t* i, const char* p, const std::vector<instruction23>& todos) { int d{0}; bool condition = false; @@ -114,7 +130,7 @@ static void tgl(size_t* i, const char* p, const std::vector<instruction23>& todo static void non(size_t* i, const char* p, const std::vector<instruction23>&) { *i += 1; } static size_t exec(size_t i, const std::vector<instruction23>& todos) { - todo_f fs[6] = {cpy, inc, dec, jnz, tgl, non}; + todo_f fs[7] = {cpy, inc, dec, jnz, tgl, out, non}; // const char *ds[6] = {"cpy", "inc", "dec", "jnz", "tgl", "non"}; auto d = todos[i]; auto x = d.which(); @@ -141,4 +157,18 @@ std::pair<int64_t, int64_t> day23(line_view file) { return {get('a'), 0}; } + +std::pair<int64_t, int64_t> day25(line_view file) { + for (int i = 0; i < 10000; i++) { + printf("%d ", i); + get('a') = i; + get('b') = 0; + get('c') = 0; + get('d') = 0; + clock_signal = 0; + day23(file); + } + + return {0, 0}; +} } // namespace aoc2016 |