Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

33 lines
822B

  1. import math
  2. import collections
  3. import itertools
  4. import re
  5. text = open(0).read()
  6. grid = collections.defaultdict(str) | {
  7. (x, y): cell
  8. for y, line in enumerate(text.splitlines())
  9. for x, cell in enumerate(line)
  10. }
  11. parts = collections.defaultdict(list)
  12. ans1 = 0
  13. for y, ln in enumerate(text.splitlines()):
  14. ys = [y - 1, y, y + 1]
  15. for match in re.finditer(r'\d+', ln):
  16. N = int(match.group(0))
  17. xs = list(range(match.start() - 1, match.end() + 1))
  18. sub = {(x, y): grid[x, y] for x in xs for y in ys}
  19. if set(sub.values()) - set('0123456789\n.'):
  20. ans1 += N
  21. for key, value in sub.items():
  22. if value == '*':
  23. parts[key].append(N)
  24. print(ans1)
  25. ans2 = sum(math.prod(values) for values in parts.values() if len(values) == 2)
  26. print(ans2)