Ваша миссия состоит в том, чтобы создать алгоритм (программу или функцию), который может оптимизировать упаковку фруктов с конвейерной ленты в пакеты для отправки розничным продавцам, оптимизируя для наибольшего количества пакетов.
Каждая сумка должна весить, по крайней мере, определенное количество, но любое превышение теряется, поскольку этот вес можно использовать для заполнения другой сумки. Ваша машина для расфасовки всегда имеет 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