diff options
author | Marvin Borner | 2020-12-02 16:26:43 +0100 |
---|---|---|
committer | Marvin Borner | 2020-12-02 16:26:43 +0100 |
commit | d812f7787f7394adbd69407e63aaab400ea2b56c (patch) | |
tree | 20702e9f6f1b7c7a1912bba7e6c7300abe8bea55 /2020/2/solve.c | |
parent | cff9ac2e79c50456d96afc112d22e12660b10bfe (diff) |
Added solutions for second day
Diffstat (limited to '2020/2/solve.c')
-rw-r--r-- | 2020/2/solve.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/2020/2/solve.c b/2020/2/solve.c new file mode 100644 index 0000000..66f5577 --- /dev/null +++ b/2020/2/solve.c @@ -0,0 +1,70 @@ +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +int part_one() +{ + FILE *fp = fopen("input", "r"); + if (!fp) + exit(EXIT_FAILURE); + + int res = 0; + + char *line = NULL; + size_t len = 0; + ssize_t read = 0; + while ((read = getline(&line, &len, fp)) != -1) { + (void)read; + int low, high, cnt = 0; + char ch; + char str[256]; + sscanf(line, "%d-%d %c: %s\n", &low, &high, &ch, &str[0]); + for (int i = 0; i < strlen(str); i++) { + if (str[i] == ch) { + cnt++; + } + } + if (cnt >= low && cnt <= high) + res++; + } + + fclose(fp); + + return res; +} + +int part_two() +{ + FILE *fp = fopen("input", "r"); + if (!fp) + exit(EXIT_FAILURE); + + int res = 0; + + char *line = NULL; + size_t len = 0; + ssize_t read = 0; + while ((read = getline(&line, &len, fp)) != -1) { + (void)read; + 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++; + } + + fclose(fp); + + return res; +} + +int main(int argc, char *argv[]) +{ + printf("%d\n", part_one()); + printf("%d\n", part_two()); + return 0; +} |