#include "common.h" #include #include #include namespace aoc2022 { enum oper { add, minus, multiply, division, none, }; struct monkey_math { line_view op[3]; oper todo; int64_t value = 0; void print() const noexcept { std::cout << op[0] << ": "; if (todo == none) { printf("%ld", value); } else { char ops[] = {'+', '-', '*', '/'}; std::cout << op[1]; printf(" %c ", ops[(int) todo]); std::cout << op[2]; } printf("\n"); } monkey_math() = default; monkey_math(line_view lv) { const char* p = lv.line; op[0] = {p, 4}; if (*(p + 6) >= '0' && *(p + 6) <= '9') { const char* p0 = p + 6; while (*p0 >= '0' && *p0 <= '9') { value = value * 10 + *p0 - '0'; p0++; } todo = none; } else { value = INT64_MAX; op[1] = {p + 6, 4}; op[2] = {p + 13, 4}; switch (*(p + 11)) { case '+': todo = add; break; case '-': todo = minus; break; case '*': todo = multiply; break; case '/': todo = division; break; } } } }; std::pair day21(line_view); } // namespace aoc2022