Ihre Mission ist es, einen Algorithmus (Programm oder Funktion) zu entwickeln, der das Verpacken von Obst von einem Förderband in Säcke, die an Einzelhändler versandt werden sollen, optimiert und für die meisten Säcke optimiert.
Jeder Beutel muss mindestens eine bestimmte Menge wiegen, aber jeder Überschuss geht als Gewinn verloren, da dieses Gewicht zum Befüllen eines anderen Beutels verwendet werden könnte. Ihre Verpackungsmaschine hat immer eine Vorausschau nach n
Früchten aus der Warteschlange und kann diese n
Früchte möglicherweise nur der (einzelnen) Tasche hinzufügen , die gerade verarbeitet wird. Es kann nicht über die n
ersten Elemente in der Warteschlange hinaussehen. Das Programm weiß immer genau, wie viel Gewicht sich bereits in der Tasche befindet.
Ein anderer Weg, dies zu visualisieren, ist ein Förderband mit einer Ladefläche n
am Ende, von dem eine Frucht entnommen werden muss, bevor eine neue Frucht ankommt. Eventuell übrig gebliebene Früchte und ein nicht voller Beutel am Ende werden verworfen.
Eingänge
- Liste / Anordnung der Fruchtgewichte in der Warteschlange (positive ganze Zahlen)
- Mindestgesamtgewicht für Beutel (positive ganze Zahl)
- Lookahead
n
(positive ganze Zahl)
Ausgabe
Ihr Algorithmus sollte für alle Beutel die Gewichte der Früchte in ihnen zurückgeben, mit welchen Mitteln auch immer dies für Sie und Ihre Sprache zweckmäßig ist, sei es der Standardwert oder ein Rückgabewert oder etwas anderes. Sie sollten in der Lage sein, das Programm auszuführen und Ihre Punktzahl in einer Minute auf Ihrem Computer zu berechnen.
Beispiel
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]
Wertung
Ihr Algorithmus wird in sechs Läufen mit einer Charge von 10000 Orangen, die ich für Sie vorbereitet habe, auf Lookaheads von 2 bis 7 einschließlich an beiden Enden getestet . Sie sind in Säcke mit einem Gewicht von mindestens 1000 Stück zu verpacken. Die Orangen werden normalerweise mit einem Durchschnittsgewicht von 170 und einer Standardabweichung von 13 verteilt, wenn dies hilfreich ist.
Ihre Punktzahl ist die Summe der Taschen aus den sechs Läufen. Die höchste Punktzahl gewinnt. Standardlücken sind nicht zulässig.
Einfache Beispielimplementierung und Test-Suite-Boilerplate in Haskell