10_jolts.py 791 B

1234567891011121314151617181920212223242526272829303132333435
  1. #!/usr/bin/env python3
  2. import sys
  3. from functools import lru_cache
  4. from itertools import combinations
  5. def diffs(adapters):
  6. prev = 0
  7. for jolts in adapters:
  8. yield jolts - prev
  9. prev = jolts
  10. yield 3
  11. def mul_diffs(adapters):
  12. d = list(diffs(adapters))
  13. return d.count(1) * d.count(3)
  14. def arrangements(adapters):
  15. graph = {}
  16. for a, b in combinations([0] + adapters, 2):
  17. if b - a <= 3:
  18. graph.setdefault(a, []).append(b)
  19. @lru_cache(maxsize=None)
  20. def walk(node):
  21. if node == adapters[-1]:
  22. return 1
  23. elif not graph[node]:
  24. return 0
  25. return sum(map(walk, graph[node]))
  26. return walk(0)
  27. adapters = sorted(map(int, sys.stdin))
  28. print(mul_diffs(adapters))
  29. print(arrangements(adapters))