diff options
Diffstat (limited to '2020/02/solve.c')
-rw-r--r-- | 2020/02/solve.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/2020/02/solve.c b/2020/02/solve.c new file mode 100644 index 0000000..6294771 --- /dev/null +++ b/2020/02/solve.c @@ -0,0 +1,60 @@ +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> + +int part_one(FILE *fp) +{ + int res = 0; + + char *line = NULL; + size_t len = 0; + while (getline(&line, &len, fp) != -1) { + int low, high, cnt = 0; + char ch; + char str[42]; + sscanf(line, "%d-%d %c: %s\n", &low, &high, &ch, &str[0]); + + for (char *p = str; *p; p++) + if (*p == ch) + cnt++; + + if (cnt >= low && cnt <= high) + res++; + } + + return res; +} + +int part_two(FILE *fp) +{ + int res = 0; + + char *line = NULL; + size_t len = 0; + while (getline(&line, &len, fp) != -1) { + int low, high, cnt = 0; + char ch, first, second; + char str[256]; + sscanf(line, "%d-%d %c: %s\n", &low, &high, &ch, &str[0]); + first = str[low - 1]; + second = str[high - 1]; + if (first == ch && second != ch || first != ch && second == ch) + res++; + } + + return res; +} + +int main(int argc, char *argv[]) +{ + FILE *fp = fopen("input", "r"); + if (!fp) + exit(EXIT_FAILURE); + + printf("%d\n", part_one(fp)); + rewind(fp); + printf("%d\n", part_two(fp)); + + fclose(fp); + return 0; +} |