Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

40 linhas
996B

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