aboutsummaryrefslogtreecommitdiff
path: root/2020/03/solve.c
diff options
context:
space:
mode:
authorMarvin Borner2020-12-08 20:56:10 +0100
committerMarvin Borner2020-12-08 20:56:29 +0100
commita48df2144386d4779aaa73fcaaa46bcc66c79c4d (patch)
treecf5fbac2c35ee6939b750e8a9bc36d17c065b7bc /2020/03/solve.c
parentc3071578cfe3f97cfda05372ff2da64474a9d0c1 (diff)
Fixed naming for 10+ challenges
Diffstat (limited to '2020/03/solve.c')
-rw-r--r--2020/03/solve.c57
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;
+}