71 lines
1.3 KiB
C
71 lines
1.3 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <stdbool.h>
|
|
|
|
#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);
|
|
}
|