From 997965d7a5a568820ec8af8d07788f3886022f1c Mon Sep 17 00:00:00 2001 From: June McEnroe Date: Thu, 10 Dec 2020 00:45:17 -0500 Subject: Solve day 10 part 2 Much tougher than part 1. I got tripped up on using an int where I needed a long again. That number is huge! --- 2020/day10.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to '2020') diff --git a/2020/day10.c b/2020/day10.c index 789f2b1..261d96b 100644 --- a/2020/day10.c +++ b/2020/day10.c @@ -5,9 +5,18 @@ static int compar(const void *_a, const void *_b) { const int *b = _b; return *a - *b; } +static int list[256]; +static int len; +static long tail[256]; +static long chains(int i) { + if (i == len - 1) tail[i] = 1; + if (tail[i]) return tail[i]; + for (int j = i + 1; j <= i + 3 && j < len; ++j) { + if (list[j] - list[i] <= 3) tail[i] += chains(j); + } + return tail[i]; +} int main(void) { - int list[256]; - int len = 0; while (EOF != scanf("%d\n", &list[len])) { len++; } @@ -21,4 +30,5 @@ int main(void) { if (list[i] - list[i-1] == 3) j3++; } printf("%d\n", j1 * j3); + printf("%ld\n", chains(0)); } -- cgit 1.4.1