487. Сакура

Не решаласьСредняя

Йоширо, известный в своём родном городе Нара художник, отметился особенной любовью к обработке старинных мотивов на шёлке. Его работы часто отражают красоту природы — в частности, изысканную величественность цветущей сакуры, японской вишни.

Основным инструментом рисования для Йоширо стала не обычная кисть, а код на JavaScript. Йоширо старается использовать каждую возможность, которую дают технологии, чтобы виртуально воссоздать буйство красок, которое может предложить только природа. Он создал функцию drawTree, которая рисует фрактальное дерево — идеальное дерево сакуры во всём его изящном величии.

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

Ваша задача — помочь этому любителю искусства и производительности. Оптимизируйте функцию drawTree, которую он использовал. Улучшите производительность, сохраняя гармонию в картинах художника. Йоширо возлагает на вас большие надежды: он хочет, чтобы каждый мог наслаждаться непревзойдённой красотой сакуры в его творениях без задержек и потери качества.

sakura

Примечание

Вносить изменения нужно только в файле drawTree.js. Получайте значения переменных ctx, calculateWidth, calculateColor, length, depth, angleOffset и т. д. из области видимости, как это сделано в оригинальной реализации функции.

При оптимизации кода соблюдайте следующие условия:

  1. Удалите использование рекурсии.
  2. Избавьтесь от лишних вызовов трудозатратных функций calculateWidth и calculateColor.
  3. Улучшение производительности не должно снижать функциональность генератора фрактального дерева.

Для проверки нужно отправить только содержимое файла drawTree.js.

Решение требуется оформить по шаблону:

// ваши вспомогательные функции

function drawTree(startY, angle, level = 0) {
// основная функция
// ...
};

Чтобы открыть playground, откройте файл проекта index.html в своём браузере. Решение будет оценено с учётом глубины стека вызовов и времени отрисовки дерева.

Ограничения

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

3 с

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

640 МБ

Теги

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