#include #include #include #include #include "../../lib/aoc.h" enum State { M, U, L, OPEN, D1, D2 }; int main() { int sum = 0; int cond_sum = 0; char d1[10], d2[10]; int d1_index, d2_index; enum State state = M; bool do_mult = true; char *c = aoc_read_input(); while(*c != '\0') { if (memcmp(c, "do()", 4) == 0) do_mult = true; else if (memcmp(c, "don't()", 7) == 0) do_mult = false; switch (state) { case M: if (*c == 'm') state = U; break; case U: if (*c == 'u') state = L; else state = M; break; case L: if (*c == 'l') state = OPEN; else state = M; break; case OPEN: d1_index = 0; d2_index = 0; if (*c == '(') state = D1; else state = M; break; case D1: if (*c >= '0' && *c <= '9') { d1[d1_index++] = *c; } else if(*c == ',') state = D2; else state = M; break; case D2: if (*c >= '0' && *c <= '9') { d2[d2_index++] = *c; } else if(*c == ')') { d1[d1_index] = '\0'; d2[d2_index] = '\0'; sum += atoi(d1) * atoi(d2); if (do_mult) cond_sum += atoi(d1) * atoi(d2); state = M; } else state = M; break; } c++; } printf("Part 1: %d\n", sum); printf("Part 2: %d\n", cond_sum); aoc_free(); return 0; }