script.js - функция testInput.js - тестовый объект
Объект-результат выводится в консоль
Ход действий:
- Добавила примитивную сборку, чтобы автоматически перезагружать браузер при изменениях;
- Для удобства тестирования вынесла тестовые данные в отдельный файл;
- Будем ориентироваться, что самое важное - уместить работу всех приборов, поэтому сортируем приборы по
- Длительности работы,
- Ограничению по времени (сначала с определенной, затем общие),
- По мощности (возрастание);
- Подготовила массивы и переменные;
- Добавила функцию нахождения субмассива c наименьшей суммой по алгоритму Кадана;
- Добавила функцию, проверяющую условия (ограничение по максимальной мощности и времени суток работы);
- Добавила в функцию (4) функцию проверяющую значения на условия + функцию, находящую первый подходящий под условия субмассив. При проверке на условия проходятся все значения от 0 до 23, я предположила, что это небольшой массив, поэтому можно позволить считать локальный минимум для каждого элемента. В функции, находящей первый подходящий промежуток, проверка начинается с последнего элемента, что позволяет экономить произоводительность, в случаях с приборами, работающими короткий промежуток времени.
- Добавила функцию, составляющую расписание и статистику.
Получился жадный алгорим, который в большинстве случаев выдаст оптимальное решение.