11_galaxies.py 664 B

1234567891011121314151617181920
  1. #!/usr/bin/env python3
  2. import sys
  3. from itertools import accumulate, combinations
  4. def expand(axis, scale):
  5. empty = [scale - 1] * (max(axis) + 1)
  6. for n in axis:
  7. empty[n] = 0
  8. add = list(accumulate(empty))
  9. for n in axis:
  10. yield n + add[n]
  11. def pathsum(galaxies):
  12. return sum(abs(bx - ax) + abs(by - ay)
  13. for (ax, ay), (bx, by) in combinations(galaxies, 2))
  14. galaxies = [(x, y) for y, line in enumerate(sys.stdin)
  15. for x, char in enumerate(line) if char == '#']
  16. print(pathsum(zip(*(expand(axis, 2) for axis in zip(*galaxies)))))
  17. print(pathsum(zip(*(expand(axis, 1000000) for axis in zip(*galaxies)))))