На экране оформления Ozon показывает, сколькими посылками приедет заказ. Склад собирает коробки по порядку товаров в корзине, лимит одной посылки — 25 кг.
Напишите packParcels(items, maxGrams). items — массив { sku, grams } в порядке корзины. Идём по нему и кладём товар в текущую посылку, если её вес с этим товаром не больше maxGrams; иначе открываем новую.
Товар тяжелее лимита (холодильник на 60 кг) едет отдельной посылкой: соседей к нему не кладём. Пустых посылок в ответе нет. Вернуть массив посылок, каждая — массив sku.
В работе: Подпись «Придёт 3 посылками» в оформлении заказа: 40 % заказов с бытовой техникой делятся.
Пример 1: ровно в лимит
[{"sku": "чайник", "grams": 1500}, {"sku": "гантели", "grams": 23500}, {"sku": "коврик", "grams": 900}], 25000[["чайник", "гантели"], ["коврик"]]
Пример 2: всё в одну
[{"sku": "книга", "grams": 400}, {"sku": "кружка", "grams": 350}], 25000[["книга", "кружка"]]
packParcels — тест вызывает её сам. Таймеры и Date в тестах ненастоящие: время идёт по команде теста, поэтому setTimeout на 5 секунд проверяется мгновенно. Тестов 7: 2 открыты выше, остальные приходят после старта подхода. Лимит — 2 с на тест.
function packParcels(items, maxGrams) // → string[][]
Источник: на задачах Ozon: оформление заказа, деление на посылки. Условие пересказано своими словами.
Ожидаемый ответ не нужен: покажем, что вернула функция.
Здесь появится результат отправки.