Найти в Дзене
Николай Сталин

E. Рельеф планеты Х. Чемпионат по программированию Яндекса: Фронтенд, Финал 2019

Оглавление

В 2050 году учёные из МКС начали получать особенные сигналы из космоса с массивами чисел. Учёные предполагают, что некая инопланетная цивилизация передаёт в массивах рельеф части своей планеты.

Вам предложили присоединиться к исследованию зашифрованного сигнала, чтобы помочь воссоздать эту предположительную местность.

Описание прилагается:

Значения h описывают высоты (h>0), низины (h<0) и уровень моря (h=0) в пикселях (px) кратные 10. (далее в h, пиксели будут опускаться).

Площади (S) объектов определяются суммой абсолютных значений элементов. ([–10,–30,–10], S=50)

Ширина одной клетки =10px

Солнце расположено в промежутке 100<h<150. Если его нет, то тема сменяется на ночную. Цвет: ffff00

Звёзды расположены на высоте h≥150. Видны только ночью. Цвет: ffffff

Горы — положительно определённые палиндромы нечётной длины >1 с вершиной 30≤h≤100. ([0,10,30,10,0]). Нужно найти и нарисовать самую большую гору по площади (остальные возвышенности не рисуем). Цвет на день / ночь: bb3300 / 5b3500

Озёра — отрицательно определённые палиндромы нечётной длины >1 с глубиной −30≥h≥−100. ([0,–10,–30,–10,0]). Нужно найти и нарисовать самое большое озеро по площади (остальные низменности не рисуем). Цвет на день / ночь: 0f5ed6 / 036bb5

Алмазы расположены на глубине h<−100, должны граничить с землёй (h≥0). [0,–110,10]. Клетка перевёрнута на 45∘. Цвет: #ffffff

  • Цвет дневного неба: #5baef7
  • Цвет звёздного неба: #120078
  • Цвет земли: #793b0f

Учёные хотят, чтобы вы графически представили такой массив в виде прямоугольников одинаковой ширины.

Примеры:

День: [0,–10,–20,–30,–20,–10,0,10,–160,0,40,0,140,150,0,–120,0,–20,0,20,10,20,30,40,30,20,10,0]

-2

Ночь: [0,–10,–20,–30,–20,–10,160,10,–110,0,40,0,90,0,0,150,–130,0,–20,0,20,170,10,20,30,40,30,20,10,0]

-3

Решение представляет собой функцию, возвращющую объект со строками {script,style}, которые будут добавляться в HTML-документ с единственным элементом в теле <div class="world»</div>.

Задача решается при помощи разметки, без использования canvas.

<!DOCTYPE html>  
<html lang="en">  
  <head>  
    <meta charset="UTF-8">  
    <style type="text/css">‘${style}‘</style>  
  </head>  
  <body>  
    <div class="world"></div>  
    <script type="text/javascript">‘${script}‘</script>  
  </body>  
</html>

Пришлите решение в таком виде:

module.exports = function(arr) {  
    let script,style;  
    ...  
    return {  
        script: script,  
        style: style  
    };  
}

Примечания

Обратите внимание:

  • ‘script’ и ‘style’ добавляются в чистом виде без тегов,
  • ширина блока (класса) ‘world’ должна быть равна произведению количества элементов на ширину одной клетки (10 px). Например, для массива [0,10,150,10,–150] ширина равняется 5×10 px = 50 px,
  • высота блока (класса) ‘world’ должна быть равна сумме абсолютных значений максимального и минимального элементов. Например, для массива [0,10,150,10,–150] высота равняется |150| + |–150| = 300 px,
  • горы и озёра не обязательно должны граничить с уровнем моря (h=0),
  • горы и озёра монотонно убывают и возрастают от центра,
  • для алмаза [–150], h=−150 определяет нижнюю грань (т.е. нужно верстать с –140 по –150),
  • тесты на скриншоты будут прогоняться относительно класса ‘world’.