Votre mission est de construire un algorithme (programme ou fonction) qui puisse optimiser le conditionnement des fruits d'un tapis roulant dans des sacs à envoyer aux détaillants, optimisant pour un plus grand nombre de sacs.
Chaque sac doit peser au moins une certaine quantité, mais tout excédent est un manque à gagner, car ce poids pourrait être utilisé pour remplir un autre sac. Votre machine d'ensachage a toujours une longueur d'avance sur les n
fruits de la file d'attente et peut uniquement choisir d'ajouter l'un de ces n
fruits au sac (unique) en cours de traitement. Il ne peut pas regarder au-delà des n
premiers éléments de la file d'attente. Le programme sait toujours exactement combien de poids il y a déjà dans le sac.
Une autre façon de visualiser cela est d'avoir un tapis roulant avec une zone de chargement de taille n
à la fin, d'où un fruit doit être pris avant l'arrivée d'un nouveau fruit. Tout fruit restant et un sac non plein à la fin sont jetés.
Contributions
- Liste / tableau des poids des fruits en file d'attente (entiers positifs)
- Poids total minimum pour les sacs (entier positif)
- Lookahead
n
(entier positif)
Production
Votre algorithme doit renvoyer pour tous les sacs le poids des fruits qu'ils contiennent, par tout moyen qui vous convient et votre langue, que ce soit stdin ou une valeur de retour ou autre chose. Vous devriez pouvoir exécuter le programme et calculer votre score en une minute sur votre ordinateur.
Exemple
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]
Notation
Votre algorithme sera testé sur six passages sur un lot de 10000 oranges que j'ai préparé pour vous, sur des têtes de recherche allant de 2 à 7, inclus aux deux extrémités. Vous devez les emballer dans des sacs pesant au moins 1 000 unités. Les oranges sont normalement distribuées avec un poids moyen de 170 et un écart type de 13, si cela peut être utile.
Votre score sera la somme du nombre de sacs des six courses. Le score le plus élevé l'emporte. Les failles standard ne sont pas autorisées.
Exemple d'implémentation simple et passe-partout de suite de tests à Haskell