|
|
@@ -0,0 +1,35 @@
|
|
|
+#!/usr/bin/env python3
|
|
|
+import sys
|
|
|
+from functools import lru_cache
|
|
|
+from itertools import combinations
|
|
|
+
|
|
|
+def diffs(adapters):
|
|
|
+ prev = 0
|
|
|
+ for jolts in adapters:
|
|
|
+ yield jolts - prev
|
|
|
+ prev = jolts
|
|
|
+ yield 3
|
|
|
+
|
|
|
+def mul_diffs(adapters):
|
|
|
+ d = list(diffs(adapters))
|
|
|
+ return d.count(1) * d.count(3)
|
|
|
+
|
|
|
+def arrangements(adapters):
|
|
|
+ graph = {}
|
|
|
+ for a, b in combinations([0] + adapters, 2):
|
|
|
+ if b - a <= 3:
|
|
|
+ graph.setdefault(a, []).append(b)
|
|
|
+
|
|
|
+ @lru_cache(maxsize=None)
|
|
|
+ def walk(node):
|
|
|
+ if node == adapters[-1]:
|
|
|
+ return 1
|
|
|
+ elif not graph[node]:
|
|
|
+ return 0
|
|
|
+ return sum(map(walk, graph[node]))
|
|
|
+
|
|
|
+ return walk(0)
|
|
|
+
|
|
|
+adapters = sorted(map(int, sys.stdin))
|
|
|
+print(mul_diffs(adapters))
|
|
|
+print(arrangements(adapters))
|