Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

29 lines
767B

  1. def render(grid, brush):
  2. if isinstance(brush, str):
  3. brush = {i: c for i, c in enumerate(brush)}
  4. xmin, *_, xmax = sorted(int(p.real) for p in grid)
  5. ymin, *_, ymax = sorted(int(p.imag) for p in grid)
  6. brush[None] = ' '
  7. rendered = ''
  8. for y in range(ymin, ymax + 1):
  9. for x in range(xmin, xmax + 1):
  10. rendered += brush[grid.get(complex(x, y))]
  11. rendered += '\n'
  12. return rendered
  13. def bsearch(fn, goal, lo, hi):
  14. while hi - lo > 1:
  15. mid = lo + (hi - lo) // 2
  16. if goal < fn(mid):
  17. lo, hi = lo, mid
  18. else:
  19. lo, hi = mid, hi
  20. # check
  21. a, b = fn(lo), fn(hi)
  22. assert a <= goal, 'lower bound too high'
  23. assert goal <= b, 'higher bound too low'
  24. return lo