Код Senior CI и параллельный запуск обновлено

Шарды по длительности тестов

Условие

Напишите balance_shards(durations, n). durations это словарь «тест → секунды», n число шардов. Жадный алгоритм:

  1. Отсортировать тесты по убыванию длительности, при равной по имени по возрастанию.
  2. Каждый тест класть в шард с наименьшей суммой, при равенстве в шард с меньшим номером.

Вернуть {"shards": [[тесты в порядке добавления], ...], "loads": [суммы шардов]}.

Примеры

balance_shards({"a":10,"b":8,"c":5,"d":4,"e":3}, 2) // {"shards":[["a","d"],["b","c","e"]],"loads":[14,16]}
balance_shards({"x":5,"y":5,"z":5}, 3) // {"shards":[["x"],["y"],["z"]],"loads":[5,5,5]}
balance_shards({"a":1}, 3) // {"shards":[["a"],[],[]],"loads":[1,0,0]}

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.