La tua missione è quella di costruire un algoritmo (programma o funzione) in grado di ottimizzare l'imballaggio della frutta da un nastro trasportatore in sacchi da inviare ai rivenditori, ottimizzando per un numero maggiore di sacchi.
Ogni sacco deve pesare almeno un certo importo, ma l'eventuale eccesso viene perso in quanto il peso può essere utilizzato per riempire un altro sacco. La tua insacchettatrice ha sempre un lookahead di n
frutti dalla coda e può solo scegliere di aggiungere uno di questi n
frutti al (singolo) sacchetto che viene elaborato. Non può guardare oltre i n
primi elementi nella coda. Il programma sa sempre esattamente quanto peso c'è già nella borsa.
Un altro modo per visualizzarlo è avere un nastro trasportatore con un'area di carico di dimensioni n
alla fine, da dove deve essere prelevato un frutto prima che arrivi un nuovo frutto. Ogni frutto rimanente e un sacchetto non pieno alla fine vengono scartati.
ingressi
- Elenco / matrice dei pesi dei frutti in coda (numeri interi positivi)
- Peso totale minimo per sacchi (numero intero positivo)
- Lookahead
n
(numero intero positivo)
Produzione
Il tuo algoritmo dovrebbe restituire per tutti i sacchi i pesi dei frutti in essi contenuti, con qualunque mezzo sia conveniente per te e la tua lingua, sia quello standard che un valore di ritorno o qualcos'altro. Dovresti essere in grado di eseguire il programma e calcolare il tuo punteggio in un minuto sul tuo computer.
Esempio
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]
punteggio
Il tuo algoritmo verrà testato su sei esecuzioni su un lotto di 10000 arance che ho preparato per te, su lookahead che vanno da 2 a 7, inclusi su entrambe le estremità. Li imballerai in sacchi del peso di almeno 1000 unità. Le arance sono normalmente distribuite con un peso medio di 170 e una deviazione standard di 13, se questo è di qualche aiuto.
Il tuo punteggio sarà la somma del numero di sacchi delle sei prove. Vince il punteggio più alto. Le scappatoie standard non sono ammesse.
Semplice esempio di implementazione e test suite di piatti in Haskell