- Описание
- Отправленные решения
487. Сакура
Йоширо, известный в своём родном городе Нара художник, отметился особенной любовью к обработке старинных мотивов на шёлке. Его работы часто отражают красоту природы — в частности, изысканную величественность цветущей сакуры, японской вишни.
Основным инструментом рисования для Йоширо стала не обычная кисть, а код на JavaScript. Йоширо старается использовать каждую возможность, которую дают технологии, чтобы виртуально воссоздать буйство красок, которое может предложить только природа. Он создал функцию drawTree, которая рисует фрактальное дерево — идеальное дерево сакуры во всём его изящном величии.
Однако Йоширо испытывает трудности. Со всей своей сложностью и детализацией функция работает медленно. Художник отметил, что некоторые детали не отображаются достаточно быстро и тем самым портят общее впечатление от его виртуального шедевра. К тому же он заметил, что это тормозит работу всего сайта.
Ваша задача — помочь этому любителю искусства и производительности. Оптимизируйте функцию drawTree
, которую он использовал. Улучшите производительность, сохраняя гармонию в картинах художника. Йоширо возлагает на вас большие надежды: он хочет, чтобы каждый мог наслаждаться непревзойдённой красотой сакуры в его творениях без задержек и потери качества.
Примечание
Вносить изменения нужно только в файле drawTree.js
. Получайте значения переменных ctx
, calculateWidth
, calculateColor
, length
, depth
, angleOffset
и т. д. из области видимости, как это сделано в оригинальной реализации функции.
При оптимизации кода соблюдайте следующие условия:
- Удалите использование рекурсии.
- Избавьтесь от лишних вызовов трудозатратных функций calculateWidth и calculateColor.
- Улучшение производительности не должно снижать функциональность генератора фрактального дерева.
Для проверки нужно отправить только содержимое файла drawTree.js
.
Решение требуется оформить по шаблону:
// ваши вспомогательные функции
function drawTree(startY, angle, level = 0) {
// основная функция
// ...
};
Чтобы открыть playground, откройте файл проекта index.html
в своём браузере. Решение будет оценено с учётом глубины стека вызовов и времени отрисовки дерева.
Ограничения
Ограничение времени
3 с
Ограничение памяти
640 МБ