From 99f7f216115b86e6b6a20e7d7fdd02951ad851c2 Mon Sep 17 00:00:00 2001 From: Bill Rossi Date: Tue, 3 Dec 2024 02:46:19 -0500 Subject: [PATCH] c 2024 3 part 1 --- c/2024/3/mull_it_over.c | 69 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 c/2024/3/mull_it_over.c diff --git a/c/2024/3/mull_it_over.c b/c/2024/3/mull_it_over.c new file mode 100644 index 0000000..863491f --- /dev/null +++ b/c/2024/3/mull_it_over.c @@ -0,0 +1,69 @@ +#include +#include +#include +#include + +#include "../../lib/aoc.h" + +enum State { M, U, L, OPEN, D1, COMMA, D2, CLOSE }; + +int main() { + char *line; + + int sum = 0; + + char d1[10], d2[10]; + int d1_index, d2_index; + + while ((line = aoc_read_line()) != NULL) { + enum State state = M; + char *c = line; + while(*c != '\0') { + 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); + state = M; + } + else state = M; + break; + } + c++; + } + } + + printf("Part 1: %d\n", sum); + // printf("Part 2: %d\n", safe_skip_report_count); + + aoc_free(); + return 0; +}