08_jboxes.py 982 B

123456789101112131415161718192021222324252627
  1. #!/usr/bin/env python3
  2. import sys
  3. from heapq import nlargest
  4. from itertools import combinations
  5. def squared_distance(xa, ya, za, xb, yb, zb):
  6. return (xa - xb) ** 2 + (ya - yb) ** 2 + (za - zb) ** 2
  7. def connect(boxes, nfirst):
  8. pairs = sorted((squared_distance(*a, *b), i, j)
  9. for (i, a), (j, b) in combinations(enumerate(boxes), 2))
  10. circuits = [{i} for i in range(len(boxes))]
  11. for p, (_, i, j) in enumerate(pairs):
  12. circuits[i].update(circuits[j])
  13. for k in circuits[j]:
  14. circuits[k] = circuits[i]
  15. if p == nfirst - 1:
  16. uniq = {id(c): c for c in circuits}
  17. a, b, c = nlargest(3, uniq.values(), key=len)
  18. largest = len(a) * len(b) * len(c)
  19. if len(circuits[i]) == len(boxes):
  20. return largest, boxes[i], boxes[j]
  21. boxes = [tuple(map(int, line.split(','))) for line in sys.stdin]
  22. largest, last1, last2 = connect(boxes, 1000)
  23. print(largest)
  24. print(last1[0] * last2[0])