diff options
Diffstat (limited to 'advent-of-code/2022/10')
| -rw-r--r-- | advent-of-code/2022/10/1.c | 54 | ||||
| -rw-r--r-- | advent-of-code/2022/10/2.c | 62 | ||||
| -rw-r--r-- | advent-of-code/2022/10/Makefile | 12 | ||||
| -rw-r--r-- | advent-of-code/2022/10/input | 141 |
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 + |
