03_fabric.py 839 B

1234567891011121314151617181920212223242526272829303132333435
  1. #!/usr/bin/env python3
  2. import sys
  3. import re
  4. claims = [tuple(int(col) for col in re.split(r'[#@, :x\n]', line) if col)
  5. for line in sys.stdin]
  6. W = H = 1000
  7. # part 1
  8. grid = W * H * [0]
  9. for patch, xl, yl, w, h in claims:
  10. for x in range(xl, xl + w):
  11. for y in range(yl, yl + h):
  12. grid[y * W + x] += 1
  13. print(sum(int(cell > 1) for cell in grid))
  14. # part 2
  15. grid = W * H * [0]
  16. intact = [False] + [True] * len(claims)
  17. for patch, xl, yl, w, h in claims:
  18. for x in range(xl, xl + w):
  19. for y in range(yl, yl + h):
  20. prev = grid[y * W + x]
  21. if prev:
  22. intact[prev] = False
  23. intact[patch] = False
  24. else:
  25. grid[y * W + x] = patch
  26. for patch, still_intact in enumerate(intact):
  27. if still_intact:
  28. print(patch)
  29. break