Twoim zadaniem jest zbudowanie algorytmu (programu lub funkcji), który może zoptymalizować pakowanie owoców z przenośnika taśmowego do worków, które zostaną wysłane do sprzedawców, optymalizując pod kątem największej liczby worków.
Każda torebka musi ważyć co najmniej pewną ilość, ale wszelkie nadwyżki tracą zysk, ponieważ tę wagę można wykorzystać do napełnienia innej torebki. Twoja maszyna pakująca zawsze ma przed oczyma n
owoce z kolejki i może tylko dodać te n
owoce do (pojedynczej) torby, która jest przetwarzana. Nie może patrzeć poza n
pierwsze elementy w kolejce. Program zawsze wie dokładnie, ile już ma w wadze.
Innym sposobem na zwizualizowanie tego jest posiadanie przenośnika taśmowego z obszarem ładunkowym n
na końcu, z którego należy pobrać owoc, zanim pojawi się nowy owoc. Wszelkie resztki owoców i niepełną torbę na końcu są odrzucane.
Wejścia
- Lista / tablica wag owoców w kolejce (dodatnie liczby całkowite)
- Minimalna masa całkowita worków (dodatnia liczba całkowita)
- Lookahead
n
(dodatnia liczba całkowita)
Wydajność
Twój algorytm powinien zwracać dla wszystkich toreb masy owoców w nich, w dowolny sposób dogodny dla Ciebie i Twojego języka, niezależnie od tego, czy jest to wartość standardowa, czy wartość zwrotna, czy coś innego. Powinieneś być w stanie uruchomić program i obliczyć swój wynik w ciągu minuty na komputerze.
Przykład
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]
Punktacja
Twój algorytm zostanie przetestowany w sześciu seriach na partii 10000 pomarańczy, którą dla ciebie przygotowałem, na wyprzedzeniach od 2 do 7, w tym na obu końcach. Zapakujesz je w torby o wadze co najmniej 1000 sztuk. Pomarańcze są zwykle rozmieszczone ze średnią masą 170 i standardowym odchyleniem 13, jeśli to jest pomocne.
Twój wynik będzie sumą liczby worków z sześciu serii. Najwyższy wynik wygrywa. Standardowe luki są niedozwolone.
Prosta przykładowa implementacja i płyta testowa pakietu testowego w Haskell