From baf4910870a6e8999802b9a4a22eabd4142a34e3 Mon Sep 17 00:00:00 2001 From: Bond_009 Date: Thu, 1 Dec 2022 22:30:22 +0100 Subject: Move all Advent of Codes into one repo --- 2020/10/part1.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 2020/10/part1.c (limited to '2020/10/part1.c') diff --git a/2020/10/part1.c b/2020/10/part1.c new file mode 100644 index 0000000..f5a700e --- /dev/null +++ b/2020/10/part1.c @@ -0,0 +1,70 @@ +#include +#include +#include +#include +#include + +#define MAX_INPUT_LEN 128 + +void insert_value_sorted(int *list, size_t *size, int value) +{ + long long low = 0, high = *size; + while (low < high) { + int m = low + (high - low) / 2; + if (list[m] < value) { + low = m + 1; + } + else if (list[m] > value) { + high = m; + } + else { + // Value already exists in the list + return; + } + } + + for (long long i = *size - 1; i >= low; i--) { + list[i + 1] = list[i]; + } + + (*size)++; + list[low] = value; +} + +int solve(const char *filename) +{ + FILE *file = fopen(filename, "r"); + + // Include space for newline and string terminator + char buffer[128] = { 0 }; + + int input[MAX_INPUT_LEN] = { 0 }; + size_t input_size = 1; // 0 is our start value + + while (fgets(buffer, 128, file)) { + insert_value_sorted(input, &input_size, atoi(buffer)); + } + + fclose(file); + + int diff1 = 0; + int diff3 = 1; // Diff with adapter + + for (size_t i = 1; i < input_size; i++) + { + int diff = input[i] - input[i - 1]; + if (diff == 1) { + diff1++; + } + else if (diff == 3) { + diff3++; + } + } + + return diff1 * diff3; +} + +int main(int argc, char *argv[]) +{ + printf("%i\n", solve(argv[argc - 1])); +} -- cgit v1.2.3