Su misión es construir un algoritmo (programa o función) que pueda optimizar el empaque de la fruta de una cinta transportadora en bolsas para enviarlas a los minoristas, optimizando la mayor cantidad de bolsas.
Cada bolsa tiene que pesar al menos una cierta cantidad, pero cualquier exceso se pierde, ya que ese peso podría usarse para llenar otra bolsa. Su máquina de ensacado siempre tiene una anticipación de n
frutas de la cola y solo puede elegir agregar cualquiera de estas n
frutas a la (única) bolsa que se está procesando. No puede mirar más allá de los n
primeros elementos en la cola. El programa siempre sabe exactamente cuánto peso hay en la bolsa.
Otra forma de visualizar esto es tener una cinta transportadora con un área de carga de tamaño n
al final, desde donde se debe tomar una fruta antes de que llegue una nueva fruta. Cualquier fruta sobrante y una bolsa no llena al final se descartan.
Entradas
- Lista / matriz de pesos de frutas en cola (enteros positivos)
- Peso total mínimo para bolsas (entero positivo)
- Lookahead
n
(entero positivo)
Salida
Su algoritmo debe devolver para todas las bolsas el peso de las frutas en ellas, por cualquier medio que sea conveniente para usted y su idioma, ya sea un estándar o un valor de retorno u otra cosa. Debería poder ejecutar el programa y calcular su puntaje en un minuto en su computadora.
Ejemplo
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]
Tanteo
Su algoritmo se probará en seis ejecuciones en un lote de 10000 naranjas que he preparado para usted, en lookaheads que van de 2 a 7, inclusive en ambos extremos. Deberá empacarlos en bolsas de al menos 1000 unidades. Las naranjas se distribuyen normalmente con un peso medio de 170 y una desviación estándar de 13, si eso es de alguna ayuda.
Su puntaje será la suma de la cantidad de bolsas de las seis carreras. El puntaje más alto gana. Las lagunas estándar no están permitidas.
Implementación de ejemplo simple y paquete de pruebas en Haskell