diff options
-rw-r--r-- | 2020/day10.c | 14 |
1 files changed, 12 insertions, 2 deletions
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)); } |