06_coordinates.py 953 B

123456789101112131415161718192021222324252627282930313233343536
  1. #!/usr/bin/env python3
  2. import sys
  3. from collections import Counter
  4. coords = [tuple(map(int, line.split(', '))) for line in sys.stdin]
  5. W = max(x for x, y in coords) + 1
  6. H = max(y for x, y in coords) + 1
  7. # part 1
  8. grid = W * H * [-1]
  9. dist = W * H * [W * H + 1]
  10. for i, (x, y) in enumerate(coords):
  11. for j, d in enumerate(dist):
  12. dy, dx = divmod(j, W)
  13. newd = abs(dx - x) + abs(dy - y)
  14. if newd < d:
  15. dist[j] = newd
  16. grid[j] = i
  17. elif newd == d:
  18. grid[j] = -1
  19. def is_edge(y, x): return y in (0, H - 1) or x in (0, W - 1)
  20. edges = set(c for i, c in enumerate(grid) if is_edge(*divmod(i, W)))
  21. edges.add(-1)
  22. print(Counter(c for c in grid if c not in edges).most_common(1)[0][1])
  23. # part 2
  24. dist = W * H * [0]
  25. for i, (x, y) in enumerate(coords):
  26. for j, d in enumerate(dist):
  27. dy, dx = divmod(j, W)
  28. dist[j] += abs(dx - x) + abs(dy - y)
  29. print(sum(1 for d in dist if d < 10000))