diff options
author | June McEnroe <june@causal.agency> | 2018-12-08 21:51:37 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2020-11-22 00:14:25 -0500 |
commit | 7d36403d7be4ddf652adea2b145b8c668dbbb99e (patch) | |
tree | 4b5cf13580cd5833b964dfa0b296162006578f57 | |
parent | Solve day 8 part 1 (diff) | |
download | aoc-7d36403d7be4ddf652adea2b145b8c668dbbb99e.tar.gz aoc-7d36403d7be4ddf652adea2b145b8c668dbbb99e.zip |
Solve day 8 part 2
-rw-r--r-- | 2018/day08.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/2018/day08.c b/2018/day08.c index a240786..7357ed8 100644 --- a/2018/day08.c +++ b/2018/day08.c @@ -5,24 +5,40 @@ typedef unsigned uint; static uint sum; -static void meta(void) { +static uint meta(void) { uint meta; scanf("%u", &meta); sum += meta; + return meta; } -static void node(void) { +static uint node(void) { uint nchild, nmeta; scanf("%u %u", &nchild, &nmeta); + uint children[nchild]; + uint metas[nmeta]; for (uint i = 0; i < nchild; ++i) { - node(); + children[i] = node(); } for (uint i = 0; i < nmeta; ++i) { - meta(); + metas[i] = meta(); } + uint val = 0; + if (nchild) { + for (uint i = 0; i < nmeta; ++i) { + if (!metas[i] || metas[i] > nchild) continue; + val += children[metas[i] - 1]; + } + } else { + for (uint i = 0; i < nmeta; ++i) { + val += metas[i]; + } + } + return val; } int main() { - node(); + uint val = node(); printf("%u\n", sum); + printf("%u\n", val); } |