diff --git a/src/2022/03.c b/src/2022/03.c index 966be78..5df84de 100644 --- a/src/2022/03.c +++ b/src/2022/03.c @@ -1,12 +1,66 @@ #include -#include +#include #include "lfinput.h" +static int part_one(char **input, size_t sz) { + int score = 0; + + for (size_t i = 0; i < sz; ++i) { + size_t l = strlen(input[i]) / 2; + for (size_t x = 0; x < l; ++x) { + for (char *y = input[i] + l; *y != '\0'; ++y) { + if (input[i][x] == *y) { + if (*y >= 'a' && *y <= 'z') { + score += *y - 'a' + 1; + } else { + score += *y - 'A' + 27; + } + goto NEXT_P1; + } + } + } + NEXT_P1: + continue; + } + + return score; +} + +static int part_two(char **input, size_t sz) { + int score = 0; + + for (size_t i = 0; i < sz; i += 3) { + char found = 'a'; + for (char *a = input[i]; *a != '\0'; ++a) { + for (char *b = input[i + 1]; *b != '\0'; ++b) { + if (*a == *b) { + for (char *c = input[i + 2]; *c != '\0'; ++c) { + if (*a == *c) { + found = *c; + goto FOUND_SAME; + } + } + } + } + } + FOUND_SAME: + if (found >= 'a' && found <= 'z') { + score += found - 'a' + 1; + } else { + score += found - 'A' + 27; + } + } + + return score; +} + void advent2022day03(void) { size_t sz = 0; char **input = get_lines("input/2022/03", &sz); + printf("%d\n", part_one(input, sz)); + printf("%d\n", part_two(input, sz)); del_lines(input); }