diff options
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 |