Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

il y a 2 ans
il y a 2 ans
il y a 2 ans
il y a 2 ans
il y a 2 ans
il y a 2 ans
il y a 2 ans
il y a 2 ans
il y a 2 ans
123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import functools
  2. import itertools
  3. import collections
  4. text = open(0).read()
  5. ns = [int(n) for n in ''.join(n if n.isdigit() else ' ' for n in text).split()]
  6. circles = {(x, y, abs(x - a) + abs(y - b)) for x, y , a, b in zip(*[iter(ns)] * 4)}
  7. y_lim = 2_000_000
  8. seen = set()
  9. for x, y, r in circles:
  10. dy = abs(y_lim - y)
  11. dx = r - dy
  12. seen |= set(range(x - dx, x + dx))
  13. print(len(seen))
  14. criss = []
  15. cross = []
  16. for x, y, r in circles:
  17. p = complex(x, y)
  18. for i in range(4):
  19. line = (p + r * 1j ** i), (1j ** (i + 1) + 1j ** (i + 2) ), r + 1
  20. if i % 2:
  21. criss.append(line)
  22. else:
  23. cross.append(line)
  24. def intersection(l1, l2):
  25. (p1, d1, r1), (p2, d2, r2) = l1, l2
  26. for x in range(r1 + 1):
  27. # (p1 + d1 * x) = (p2 + d2 * ?)
  28. if (p1 + d1 * x) - p2 == d2:
  29. if ((p1 + d1 * x - p2) / d2).real <= r2:
  30. yield p1 + d1 * x
  31. counter = collections.Counter()
  32. for l1, l2 in itertools.product(criss, cross):
  33. for p in intersection(l1, l2):
  34. counter[p] += 1
  35. print(max(counter, key=counter.get))