diff options
| -rw-r--r-- | 13/input | 2 | ||||
| -rw-r--r-- | 13/part1.c | 48 | ||||
| -rw-r--r-- | 13/testinput | 2 |
3 files changed, 52 insertions, 0 deletions
diff --git a/13/input b/13/input new file mode 100644 index 0000000..f9503fe --- /dev/null +++ b/13/input @@ -0,0 +1,2 @@ +1005526 +37,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,41,x,x,x,x,x,x,x,x,x,587,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,13,19,x,x,x,23,x,x,x,x,x,29,x,733,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,17 diff --git a/13/part1.c b/13/part1.c new file mode 100644 index 0000000..b62d007 --- /dev/null +++ b/13/part1.c @@ -0,0 +1,48 @@ +#include <stdio.h> +#include <stdint.h> +#include <stdlib.h> +#include <string.h> + +#define BUFFER_SIZE 256 +#define MAX_INPUT_LEN 128 + +int solve(const char *filename) +{ + FILE *file = fopen(filename, "r"); + + char buffer[BUFFER_SIZE] = { 0 }; + fgets(buffer, BUFFER_SIZE, file); + int depart = atoi(buffer); + fgets(buffer, BUFFER_SIZE, file); + int bus_ids[MAX_INPUT_LEN] = { 0 }; + bus_ids[0] = atoi(buffer); + int i = 1; + char *p = buffer; + while ((p = strchr(p, ','))) { + // x is never the last value, just keep looping we find a valid input + while (*++p == 'x') { + p += 1; + } + + bus_ids[i++] = atoi(p); + } + + int bus_id = 0; + int wait = INT32_MAX; + for (int j = 0; j < i; j++) { + int id = bus_ids[j]; + int tmprem = id - (depart % id); + if (tmprem < wait) { + bus_id = id; + wait = tmprem; + } + } + + fclose(file); + return bus_id * wait; +} + +int main(int argc, char *argv[]) +{ + printf("%i\n", solve(argv[argc - 1])); +} diff --git a/13/testinput b/13/testinput new file mode 100644 index 0000000..d76f619 --- /dev/null +++ b/13/testinput @@ -0,0 +1,2 @@ +939 +7,13,x,x,59,x,31,19 |
