Sua missão é criar um algoritmo (programa ou função) que otimize a embalagem de frutas de uma correia transportadora em sacolas para serem enviadas aos varejistas, otimizando para um maior número de sacolas.
Cada sacola deve pesar pelo menos uma certa quantia, mas qualquer excesso é perda de lucro, pois esse peso pode ser usado para encher outra sacola. Sua máquina de ensacamento sempre tem uma lista de n
frutas na fila e pode optar por adicionar qualquer uma dessas n
frutas à sacola (única) que está sendo processada. Ele não pode olhar além dos n
primeiros elementos da fila. O programa sempre sabe exatamente quanto peso já existe na sacola.
Outra maneira de visualizar isso é ter uma correia transportadora com uma área de carga de tamanho n
no final, de onde uma fruta deve ser retirada antes que uma nova fruta chegue. Qualquer fruta que sobrar e uma sacola não cheia no final são descartadas.
Entradas
- Lista / matriz de pesos de frutas na fila (números inteiros positivos)
- Peso total mínimo para sacos (número inteiro positivo)
- Lookahead
n
(número inteiro positivo)
Saída
Seu algoritmo deve retornar para todas as sacolas os pesos das frutas nelas, por qualquer meio que seja conveniente para você e seu idioma, seja stdin ou um valor de retorno ou qualquer outra coisa. Você poderá executar o programa e calcular sua pontuação em um minuto no seu computador.
Exemplo
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]
Pontuação
Seu algoritmo será testado em seis execuções em um lote de 10.000 laranjas que eu preparei para você, em viseiras que variam de 2 a 7, inclusive nas duas extremidades. Você deve embalá-los em sacos de pelo menos 1000 unidades. As laranjas são normalmente distribuídas com um peso médio de 170 e um desvio padrão de 13, se isso for de alguma ajuda.
Sua pontuação será a soma do número de malas das seis corridas. A pontuação mais alta vence. As brechas padrão não são permitidas.
Implementação de exemplo simples e clichê do conjunto de testes em Haskell