Ваша місія полягає у створенні алгоритму (програми чи функції), який може оптимізувати пакування фруктів з конвеєра в мішки, які потрібно відправити роздрібним торговцям, оптимізуючи для найбільшої кількості мішків.
Кожен мішок повинен важити хоча б певну суму, але будь-який надлишок втрачає прибуток, оскільки ця вага може бути використана для заповнення іншого мішка. Ваша машина для упаковки завжди має вигляд n
фруктів із черги і може лише додати будь-який із цих n
фруктів до (одного) мішка, який обробляється. Він не може виходити за межі n
перших елементів у черзі. Програма завжди точно знає, скільки ваги вже є в сумці.
Іншим способом візуалізації цього є транспортування стрічки з площею завантаження розміром n
на кінці, звідки потрібно брати фрукти до появи нового фрукта. Будь-які фрукти, що залишилися, та неповний пакетик наприкінці викидаються.
Вхідні дані
- Список / масив ваг фруктів у черзі (додатні цілі числа)
- Мінімальна загальна вага для мішків (натуральне число)
- Lookahead
n
(натуральне число)
Вихідні дані
Ваш алгоритм повинен повертати для всіх мішків ваги плодів у них будь-якими способами, зручними для вас та вашої мови, будь то стдин або повернене значення чи щось інше. Ви повинні мати можливість запустити програму та обчислити свій рахунок за одну хвилину на своєму комп’ютері.
Приклад
Total weight 1000, lookahead of 3 and fruit queue:
[171,163,172,196,156,175,162,176,155,182,189,142,161,160,152,162,174,172,191,185]
One possible output (indented to show how the lookahead affects the bagging):
[171,163,172, 156,175, 176]
[162, 155,182,189, 161,160]
[152,162,174,172,191,185]
Оцінка балів
Ваш алгоритм буде перевірений на шість етапів на партії з 10000 апельсинів, які я підготував для вас, на локомотивах від 2 до 7, включно з обох кінців. Ви повинні упакувати їх у мішки вагою не менше 1000 одиниць. Апельсини зазвичай розподіляються із середньою масою 170 та стандартним відхиленням 13, якщо це допоможе.
Ваш рахунок буде сумою кількості мішків за шість пробіжок. Виграє найвищий бал. Стандартні лазівки заборонені.
Простий приклад реалізації та випробування набірних котлів набору в Haskell