488. Pixel battle

Не решаласьСложная

В каждом из тестов ваш арт будет произвольно спамиться вражескими пикселями. Ваша задача — защитить своё изображение на полотне pixel-battle!

Для этого у вас есть два метода у объекта sdk:

  • changePixelColor
  • changeAreaColor

С помощью этих методов вы можете вернуть пикселям их прежний цвет. Количество их вызовов ограничено, поэтому старайтесь вызывать их минимальное количество раз.


type ColorCode = string;

/**
 * изменяет цвет одного пикселя на полотне
*/
changePixelColor(col: number, row: number, color: string): void;

/**
 * изменяет цвет участка,
 * где:
 * col1 и row1 являются координатами верхнего левого угла,
 * col2 и row2 являются координатами нижнего правого угла,
 * причём площадь участка больше 1 пикселя
*/
changeAreaColor(col1: number, row1: number, col2: number, row2: number, color: string): void;

Ваша задача написать функцию observeArt, которая будет восстанавливать рисунок, со следующей сигнатурой:


function observeArt(field: HTMLDivElement, art: ColorCode[][], colors: Record<ColorCode, string>): void;

art

  1. Гарантируется, что изображение можно восстановить за указанное количество вызовов и перекрашивая пиксели не более одного раза.
  2. Стоит предпочитать вызов метода changeAreaColor вызову changePixelColor.
  3. Каждая клякса на полотне представляет собой прямоугольник (кляксы не соприкасаются друг с другом). Один и тот же пиксель может быть закрашен максимум один раз.
  4. В решении запрещается использовать setInterval или же вызывать setTimeout рекурсивно. Интервал между появлением неправильных пикселей будет не больше 2 секунд.
  5. Все пиксели имеют CSS класс pixel, цвет пикселя задается через свойство background-color.

Вы можете скачать playground.js с примером использования функции observeArt.

Формат вывода

В качестве решения отправьте JavaScript-файл в следующим формате (типы в условии предоставлены для удобства):


const observeArt = (field, art, colors) => {
    // your code here...
};

Ограничения

Ограничение времени

15 с

Ограничение памяти

640 МБ

Теги

JavaScript Node.js 20.14 + Chrome 125
Нужно войти, чтобы отправить решение.Войти