From dbaa30aa4413db70fd975054c676eb6084512293 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Sun, 7 Dec 2025 06:46:12 +0100 Subject: Add 2025 day 3 solutions --- 2025/03/.gitignore | 1 + 2025/03/Makefile | 1 + 2025/03/puzzles.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 2025/03/.gitignore create mode 100644 2025/03/Makefile create mode 100644 2025/03/puzzles.c 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 +#include +#include +#include + +#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; +} -- cgit v1.2.3