From d1aefe3ee5b1c38bc00262670fb67b1362fbc61d Mon Sep 17 00:00:00 2001 From: Bond_009 Date: Wed, 9 Dec 2020 10:24:38 +0100 Subject: Add day 9 --- 9/part1.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 9/part1.c (limited to '9/part1.c') diff --git a/9/part1.c b/9/part1.c new file mode 100644 index 0000000..a89fa0c --- /dev/null +++ b/9/part1.c @@ -0,0 +1,56 @@ +#include +#include +#include +#include +#include +#include + +#define INPUT_LEN 1000 +#define SEARCH_LEN 25 + +bool has_sum(uint64_t *cur_num) +{ + uint64_t search = *cur_num; + uint64_t *p1 = cur_num - SEARCH_LEN; + do { + uint64_t *p2 = cur_num - SEARCH_LEN; + do { + if (*p1 + *p2 == search) { + return true; + } + } while (++p2 < cur_num); + } while (++p1 < cur_num); + + return false; +} + +int exe_program(const char *filename) +{ + FILE *file = fopen(filename, "r"); + + // Include space for newline and string terminator + char buffer[24] = { 0 }; + + uint64_t *nums = malloc(INPUT_LEN * sizeof(uint64_t)); + size_t num_size = 0; + + while (fgets(buffer, 24, file)) { + nums[num_size++] = strtoull(buffer, NULL, 10); + } + + fclose(file); + + uint64_t *cur_num = nums + SEARCH_LEN; + do { + if (!has_sum(cur_num)) { + return *cur_num; + } + } while (++cur_num < nums + num_size); + + return -1; +} + +int main(int argc, char *argv[]) +{ + printf("%i\n", exe_program(argv[argc - 1])); +} -- cgit v1.2.3