diff options
author | Marvin Borner | 2020-12-08 20:56:10 +0100 |
---|---|---|
committer | Marvin Borner | 2020-12-08 20:56:29 +0100 |
commit | a48df2144386d4779aaa73fcaaa46bcc66c79c4d (patch) | |
tree | cf5fbac2c35ee6939b750e8a9bc36d17c065b7bc /2020/03/solve.c | |
parent | c3071578cfe3f97cfda05372ff2da64474a9d0c1 (diff) |
Fixed naming for 10+ challenges
Diffstat (limited to '2020/03/solve.c')
-rw-r--r-- | 2020/03/solve.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/2020/03/solve.c b/2020/03/solve.c new file mode 100644 index 0000000..2f6312b --- /dev/null +++ b/2020/03/solve.c @@ -0,0 +1,57 @@ +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> + +int part_one(FILE *fp) +{ + int res = 0; + + char *line = NULL; + size_t len = 0, strlen = 0; + int curr = 0; + while ((strlen = getline(&line, &len, fp)) != -1) { + if (line[curr % (strlen - 1)] == '#') + res++; + curr += 3; + } + + return res; +} + +#define DOWN_TWO (1 << 15) +int part_two(FILE *fp) +{ + int final = 1; + int opt[] = { 1, 3, 5, 7, 1 | DOWN_TWO }; + + char *line = NULL; + size_t len = 0, strlen = 0; + for (int i = 0; i < sizeof(opt) / sizeof(opt[0]); i++) { + int res = 0, row = 0, curr = 0; + while ((strlen = getline(&line, &len, fp)) != -1) { + if (row++ % 2 == 1 && opt[i] & DOWN_TWO) + continue; + if (line[curr % (strlen - 1)] == '#') + res++; + curr += opt[i] & ~DOWN_TWO; + } + rewind(fp); + final *= res; + } + + return final; +} + +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("%u\n", part_two(fp)); + + fclose(fp); + return 0; +} |