From ebbd61a52f5a38ca4d5f921c2bcf454d78879cf4 Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Fri, 14 Dec 2018 00:17:58 -0500 Subject: Solve day 14 part 1 --- 2018/day14.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 2018/day14.c (limited to '2018') diff --git a/2018/day14.c b/2018/day14.c new file mode 100644 index 0000000..9df7190 --- /dev/null +++ b/2018/day14.c @@ -0,0 +1,44 @@ +#include +#include + +typedef unsigned uint; + +struct Vec { + size_t cap, len; + uint *ptr; +}; +static struct Vec new(size_t cap) { + struct Vec vec = { cap }; + vec.ptr = malloc(sizeof(*vec.ptr) * cap); + return vec; +} +static void push(struct Vec *vec, uint val) { + if (vec->len == vec->cap) { + vec->cap *= 2; + vec->ptr = realloc(vec->ptr, sizeof(*vec->ptr) * vec->cap); + } + vec->ptr[vec->len++] = val; +} + +int main() { + uint count; + scanf("%u", &count); + + struct Vec vec = new(256); + push(&vec, 3); + push(&vec, 7); + + size_t elf[2] = { 0, 1 }; + for (uint i = 0; i < count + 10; ++i) { + uint sum = vec.ptr[elf[0]] + vec.ptr[elf[1]]; + if (sum / 10) push(&vec, sum / 10); + push(&vec, sum % 10); + elf[0] = (elf[0] + 1 + vec.ptr[elf[0]]) % vec.len; + elf[1] = (elf[1] + 1 + vec.ptr[elf[1]]) % vec.len; + } + + for (uint i = count; i < count + 10; ++i) { + printf("%u", vec.ptr[i]); + } + printf("\n"); +} -- cgit 1.4.1