diff options
author | June McEnroe <june@causal.agency> | 2019-12-06 05:53:42 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2020-11-22 00:14:26 -0500 |
commit | c3406a02a178421218e152ddf0609f50268be23b (patch) | |
tree | 118c635365040ccd68a551b4ca1bf3214c568ee5 | |
parent | Solve day 5 part 2 (diff) | |
download | aoc-c3406a02a178421218e152ddf0609f50268be23b.tar.gz aoc-c3406a02a178421218e152ddf0609f50268be23b.zip |
Solve day 6 part 1
-rw-r--r-- | 2019/day06.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/2019/day06.c b/2019/day06.c new file mode 100644 index 0000000..fbfda57 --- /dev/null +++ b/2019/day06.c @@ -0,0 +1,40 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +static struct Node { + char name[4]; + size_t parent; +} tree[2048]; + +static size_t node(const char *name) { + size_t i; + for (i = 0; tree[i].name[0]; ++i) { + if (strcmp(name, tree[i].name)) continue; + return i; + } + strncpy(tree[i].name, name, sizeof(tree[i].name)); + return i; +} + +static size_t ancestors(size_t i) { + size_t n = 0; + while (i) { + i = tree[i].parent; + n++; + } + return n; +} + +int main(void) { + node("COM"); + char parent[4], child[4]; + while (EOF != scanf("%3s)%3s\n", parent, child)) { + tree[node(child)].parent = node(parent); + } + size_t orbits = 0; + for (size_t i = 0; tree[i].name[0]; ++i) { + orbits += ancestors(i); + } + printf("%zu\n", orbits); +} |