summary refs log tree commit diff homepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--2020/day10.c14
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));
 }