diff options
author | kaiwu <kaiwu2004@gmail.com> | 2022-05-14 17:17:04 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2022-05-14 17:17:04 +0800 |
commit | 1a9146ae65c309c1c4dafb57a08ffb25c632fa78 (patch) | |
tree | 25df8befca23799897ee0755f1be3e066db1f8ac /src/2020/day8/aoc.h | |
parent | 3063b07245326e11667d50eeed1eaa52b93b8f68 (diff) | |
download | advent-of-code-1a9146ae65c309c1c4dafb57a08ffb25c632fa78.tar.gz advent-of-code-1a9146ae65c309c1c4dafb57a08ffb25c632fa78.zip |
2020 day8 part1
Diffstat (limited to 'src/2020/day8/aoc.h')
-rw-r--r-- | src/2020/day8/aoc.h | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/src/2020/day8/aoc.h b/src/2020/day8/aoc.h index c5ad3d1..ae2b8ee 100644 --- a/src/2020/day8/aoc.h +++ b/src/2020/day8/aoc.h @@ -3,4 +3,47 @@ namespace aoc2020 { -} +enum code_t { + nop, + jmp, + acc, +}; + +struct code { + code_t type; + int value; + int executed = 0; + + void get_number(const char** pp, int* d) { + const char* p = *pp; + int sign = *p == '+' ? 1 : -1; + p += 1; + *d = 0; + while (*p >= '0' && *p <= '9') { + *d = *d * 10 + *p - '0'; + p++; + } + *d *= sign; + *pp = p; + } + + code(line_view lv) { + const char* p = lv.line; + if (*p == 'a') + type = acc; + if (*p == 'n') + type = nop; + if (*p == 'j') + type = jmp; + while (p < lv.line + lv.length) { + if (*p == '+' || *p == '-') { + get_number(&p, &value); + } + p++; + } + } +}; + +int day8(line_view); + +} // namespace aoc2020 |