diff options
| author | Thomas Voss <mail@thomasvoss.com> | 2025-12-07 06:46:12 +0100 |
|---|---|---|
| committer | Thomas Voss <mail@thomasvoss.com> | 2025-12-07 06:46:12 +0100 |
| commit | dbaa30aa4413db70fd975054c676eb6084512293 (patch) | |
| tree | 540127d84f6f5b1d51755c37dc7504c64b405ae6 /2025 | |
| parent | e37b3ebf682be8b9b3ba0ddfc53eb2cd1768b22c (diff) | |
Add 2025 day 3 solutions
Diffstat (limited to '2025')
| -rw-r--r-- | 2025/03/.gitignore | 1 | ||||
| -rw-r--r-- | 2025/03/Makefile | 1 | ||||
| -rw-r--r-- | 2025/03/puzzles.c | 48 |
3 files changed, 50 insertions, 0 deletions
diff --git a/2025/03/.gitignore b/2025/03/.gitignore new file mode 100644 index 0000000..60d075d --- /dev/null +++ b/2025/03/.gitignore @@ -0,0 +1 @@ +puzzle-[12] diff --git a/2025/03/Makefile b/2025/03/Makefile new file mode 100644 index 0000000..de3f940 --- /dev/null +++ b/2025/03/Makefile @@ -0,0 +1 @@ +include ../../Makefiles/c.mk diff --git a/2025/03/puzzles.c b/2025/03/puzzles.c new file mode 100644 index 0000000..9bd68ee --- /dev/null +++ b/2025/03/puzzles.c @@ -0,0 +1,48 @@ +#include <err.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#ifdef PART1 + #define DIGITS ((size_t)(2)) +#else + #define DIGITS ((size_t)(12)) +#endif + +int +main(void) +{ + FILE *fp = fopen("input", "r"); + if (fp == nullptr) + err(EXIT_FAILURE, "failed to open input"); + + char *buf = nullptr; + size_t acc, bufsz; + ssize_t n; + + acc = bufsz = 0; + + while ((n = getline(&buf, &bufsz, fp)) != -1) { + if (buf[n - 1] == '\n') + buf[--n] = 0; + + char digits[DIGITS + 1]; + memcpy(digits, buf, DIGITS); + digits[DIGITS] = 0; + + for (size_t i = 1; i < n - DIGITS + 1; i++) { + for (size_t j = 0; j < DIGITS; j++) { + if (buf[i + j] > digits[j]) + memcpy(digits + j, buf + i + j, DIGITS - j); + } + } + + acc += (size_t)strtol(digits, nullptr, 10); + } + if (ferror(fp)) + err(EXIT_FAILURE, "failed to read record"); + + fclose(fp); + printf("%zu\n", acc); + return EXIT_SUCCESS; +} |