К задачам

Рендерер пиксельного экрана в терминале

СредняяАлгоритмы
Лучше работает на десктопе
2D-сеткаBresenhamРисованиеВопрос про конкурентность

Реализуйте небольшой движок пиксельного экрана.

Экран — это сетка height x width. Изначально каждая ячейка чёрная и при выводе обозначается как ..

Команды бывают такими:

  • {"type": "set", "row": r, "col": c, "color": color};
  • {"type": "line", "start": [r1, c1], "end": [r2, c2], "color": color};
  • {"type": "triangle", "points": [[r1, c1], [r2, c2], [r3, c3]], "color": color}.

Цвета: "black", "blue" и "yellow". При выводе они превращаются в ., B и Y.

Линию рисуйте как связную дискретную линию между концами. Треугольник рисует только три ребра, без заливки. Пиксели за границами экрана игнорируйте.

Верните итоговый экран как список строк.

Signature

def render_pixel_screen(height: int, width: int, commands: list[dict]) -> list[str]:

Примеры

Пример 1

Вход:
height = 3
width = 4
commands = [{"type":"set","row":1,"col":2,"color":"blue"},{"type":"line","start":[0,0],"end":[2,2],"color":"yellow"}]
Выход:["Y...",".YB.","..Y."]

Установить один пиксель и нарисовать простую диагональ

Пример 2

Вход:
height = 5
width = 5
commands = [{"type":"triangle","points":[[0,0],[0,3],[3,0]],"color":"blue"}]
Выход:["BBBB.","B.B..","BB...","B....","....."]

Треугольник рисует только рёбра

Пример 3

Вход:
height = 5
width = 4
commands = [{"type":"line","start":[0,0],"end":[4,1],"color":"yellow"}]
Выход:["Y...","Y...","Y...",".Y..",".Y.."]

Крутая линия с неединичным наклоном

Код
Python · Ctrl/⌘ + Enter для запуска
Лимит
10:00
Консоль
Нажмите кнопку запуска или Ctrl+Enter
Отрисовка пиксельного экрана в терминале — Алгоритмы задача — ML Mentor