aboutsummaryrefslogtreecommitdiff
path: root/advent-of-code/2022/10
diff options
context:
space:
mode:
Diffstat (limited to 'advent-of-code/2022/10')
-rw-r--r--advent-of-code/2022/10/1.c54
-rw-r--r--advent-of-code/2022/10/2.c62
-rw-r--r--advent-of-code/2022/10/Makefile12
-rw-r--r--advent-of-code/2022/10/input141
4 files changed, 269 insertions, 0 deletions
diff --git a/advent-of-code/2022/10/1.c b/advent-of-code/2022/10/1.c
new file mode 100644
index 0000000..12ddc22
--- /dev/null
+++ b/advent-of-code/2022/10/1.c
@@ -0,0 +1,54 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdbool.h>
+
+#include <str.h>
+
+int strength = 1;
+int sum = 0;
+int time = 1;
+
+int process() {
+ if (time == 20 || time == 60 || time == 100
+ || time == 140 || time == 180 || time == 220) {
+ sum += strength * time;
+ }
+}
+
+void tick(int value) {
+ process();
+ time++;
+ strength += value;
+}
+
+int main() {
+ FILE *fp = fopen("input", "r");
+ while (true) {
+ char *rawline = fgetline(fp);
+ if (rawline == NULL) break;
+ char *line = str_strip(rawline);
+ free(rawline);
+ char** words = str_split(line, ' ');
+ if (words == NULL) {
+ free(line);
+ continue;
+ }
+ if (words[0] == NULL) {
+ free(line); free(words);
+ continue;
+ }
+ if (strcmp(words[0], "noop") == 0) {
+ tick(0);
+ } else if (strcmp(words[0], "addx") == 0) {
+ tick(0);
+ char *ptr;
+ int value = strtol(words[1], &ptr, 10);
+ tick(value);
+ }
+ str_list_free(words);
+ free(line);
+ }
+ printf("%d\n", sum);
+ return 0;
+}
diff --git a/advent-of-code/2022/10/2.c b/advent-of-code/2022/10/2.c
new file mode 100644
index 0000000..1abcb7e
--- /dev/null
+++ b/advent-of-code/2022/10/2.c
@@ -0,0 +1,62 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdbool.h>
+
+#include <str.h>
+
+char screen[6][40];
+
+int regx = 0;
+int time = 0;
+
+void process() {
+ if (time >= 240) return;
+ int delta = time % 40 - regx;
+ if (delta <= 2 && delta >= 0) {
+ screen[time / 40][time % 40] = '#';
+ }
+}
+
+void tick(int value) {
+ process();
+ time++;
+ regx += value;
+}
+
+int main() {
+ memset(screen, '.', 240);
+ FILE *fp = fopen("input", "r");
+ while (true) {
+ char *rawline = fgetline(fp);
+ if (rawline == NULL) break;
+ char *line = str_strip(rawline);
+ free(rawline);
+ char** words = str_split(line, ' ');
+ if (words == NULL) {
+ free(line);
+ continue;
+ }
+ if (words[0] == NULL) {
+ free(line); free(words);
+ continue;
+ }
+ if (strcmp(words[0], "noop") == 0) {
+ tick(0);
+ } else if (strcmp(words[0], "addx") == 0) {
+ tick(0);
+ char *ptr;
+ int value = strtol(words[1], &ptr, 10);
+ tick(value);
+ }
+ str_list_free(words);
+ free(line);
+ }
+ for (int i = 0; i < 6; i++) {
+ for (int j = 0; j < 40; j++) {
+ printf("%c", screen[i][j]);
+ }
+ printf("\n");
+ }
+ return 0;
+}
diff --git a/advent-of-code/2022/10/Makefile b/advent-of-code/2022/10/Makefile
new file mode 100644
index 0000000..baa0901
--- /dev/null
+++ b/advent-of-code/2022/10/Makefile
@@ -0,0 +1,12 @@
+all: 1.out 2.out
+LIB=../lib/str.c
+
+1.out: 1.c
+ cc -g -I../lib/ $< $(LIB) -o $@
+
+2.out: 2.c
+ cc -g -I../lib/ $< $(LIB) -o $@
+
+.PHONY: clean
+clean:
+ -rm *.out
diff --git a/advent-of-code/2022/10/input b/advent-of-code/2022/10/input
new file mode 100644
index 0000000..0464ea6
--- /dev/null
+++ b/advent-of-code/2022/10/input
@@ -0,0 +1,141 @@
+noop
+addx 25
+addx -5
+addx -14
+addx 4
+noop
+addx 2
+addx 3
+noop
+noop
+noop
+noop
+addx 3
+addx 5
+addx 2
+noop
+noop
+addx 5
+noop
+noop
+noop
+addx 1
+addx 2
+addx 5
+addx -40
+addx 5
+noop
+addx 26
+addx -20
+addx -3
+addx 2
+noop
+addx -4
+addx 9
+addx 5
+addx 2
+addx 11
+addx -10
+addx 2
+addx 5
+addx 2
+addx 5
+noop
+noop
+noop
+addx -31
+addx 32
+addx -37
+addx 1
+addx 8
+addx 13
+addx -15
+addx 4
+noop
+addx 5
+noop
+addx 3
+addx -2
+addx 4
+addx 1
+addx 4
+addx -14
+addx 15
+addx 4
+noop
+noop
+noop
+addx 3
+addx 5
+addx -40
+noop
+addx 5
+addx 8
+addx -3
+noop
+addx 2
+addx 9
+addx -4
+noop
+noop
+noop
+noop
+addx 5
+addx -9
+addx 10
+addx 4
+noop
+noop
+addx 5
+addx -19
+addx 24
+addx -2
+addx 5
+addx -40
+addx 22
+addx -19
+addx 2
+addx 5
+addx 2
+addx 5
+noop
+noop
+addx -2
+addx 2
+addx 5
+addx 3
+noop
+addx 2
+addx 2
+addx 3
+addx -2
+addx 10
+addx -3
+addx 3
+noop
+addx -40
+addx 2
+addx 11
+addx -5
+addx -1
+noop
+addx 3
+addx 7
+noop
+addx -2
+addx 5
+addx 2
+addx 3
+noop
+addx 2
+addx 6
+addx -5
+addx 2
+addx -18
+addx 26
+addx -1
+noop
+noop
+noop
+noop
+