diff --git a/c/2024/25/code_chronicle.c b/c/2024/25/code_chronicle.c new file mode 100644 index 0000000..39c6105 --- /dev/null +++ b/c/2024/25/code_chronicle.c @@ -0,0 +1,70 @@ +#include +#include +#include +#include + +#include "../../lib/aoc.h" + +int main() { + char *line; + + int locks[2000][5]; + int locks_count = 0; + int keys[2000][5]; + int keys_count = 0; + + int pins[5]; + + do { + line = aoc_read_line(); + if (line == NULL) break; + + for (int j = 0; j < 5; j++) { + pins[j] = 0; + } + + if (line[0] == '.') { + for (int i = 0; i < 6; i++) { + line = aoc_read_line(); + for (int j = 0; j < 5; j++) { + if (pins[j] == 0 && line[j] == '#') pins[j] = 5 - i; + } + } + for (int j = 0; j < 5; j++) { + keys[keys_count][j] = pins[j]; + } + keys_count++; + } else if(line[0] == '#') { + for (int i = 0; i < 6; i++) { + line = aoc_read_line(); + for (int j = 0; j < 5; j++) { + if (line[j] == '#') pins[j] = i + 1; + } + } + for (int j = 0; j < 5; j++) { + locks[locks_count][j] = pins[j]; + } + locks_count++; + } + + line = aoc_read_line(); + if (line == NULL) break; + + } while (line != NULL); + + int pairs = 0; + for (int i = 0; i < locks_count; i++) { + for (int j = 0; j < keys_count; j++) { + for (int k = 0; k < 5; k++) { + if (locks[i][k] + keys[j][k] >= 6) goto bad; + } + pairs++; + bad: + } + } + + printf("Part 1: %d", pairs); + + aoc_free(); + exit(0); +}