From b5f4daede98eddd3a2be267d763a9053ed7635eb Mon Sep 17 00:00:00 2001 From: Evan Burkey Date: Mon, 2 Dec 2024 07:17:41 -0800 Subject: [PATCH] 24-01 --- include/advent_utility.h | 2 +- src/2024/01.c | 56 +++++++++++++++++++++++++++++++++++++--- src/advent_utility.c | 3 +++ 3 files changed, 56 insertions(+), 5 deletions(-) diff --git a/include/advent_utility.h b/include/advent_utility.h index a9ba6c5..ef3296f 100644 --- a/include/advent_utility.h +++ b/include/advent_utility.h @@ -9,7 +9,7 @@ #define MIN(x, y) (x) < (y) ? (x) : (y) char *md5_str(const char *); - Vector *string_to_int_vector(const char *input_string, const char *delim); +int int_comp(const void *a, const void *b); #endif diff --git a/src/2024/01.c b/src/2024/01.c index d72bdf8..2c0b74c 100644 --- a/src/2024/01.c +++ b/src/2024/01.c @@ -1,10 +1,58 @@ +#include #include -#include #include "lfinput.h" +#include "advent_utility.h" void advent2024day01(void) { - char *input = get_input("input/2024/01"); - printf("Solution for Day 01 of 2024 is not completed yet\n"); - free(input); + size_t sz = 0; + char **input = get_lines("input/2024/01", &sz); + int a[sz]; + int b[sz]; + const char* errstr; + + for (size_t i = 0; i < sz; i++) { + size_t sp_sz = 0; + char **sp = split(input[i], &sp_sz, " "); + + a[i] = (int)strtonum(sp[0], INT_MIN, INT_MAX, &errstr); + if (errstr != NULL) { + printf("ERR: %s\n", errstr); + free(sp); + break; + } + + b[i] = (int)strtonum(sp[1], INT_MIN, INT_MAX, &errstr); + if (errstr != NULL) { + printf("ERR: %s\n", errstr); + free(sp); + break; + } + free(sp); + } + + qsort(a, sz, sizeof(int), int_comp); + qsort(b, sz, sizeof(int), int_comp); + + int p1 = 0; + for (size_t i = 0; i < sz; i++) { + p1 += abs(a[i] - b[i]); + } + + printf("%d\n", p1); + + int p2 = 0; + for (size_t i = 0; i < sz; i++) { + int c = 0; + for (size_t j = 0; j < sz; j++) { + if (a[i] == b[j]) { + ++c; + } + } + p2 += a[i] * c; + } + + printf("%d\n", p2); + + del_lines(input); } diff --git a/src/advent_utility.c b/src/advent_utility.c index 88d5f15..052d72c 100644 --- a/src/advent_utility.c +++ b/src/advent_utility.c @@ -51,3 +51,6 @@ Vector *string_to_int_vector(const char *input_string, const char* delim) { return v; } +int int_comp(const void *a, const void *b) { + return *(int *) a - *(int *) b; +} \ No newline at end of file