Pierwsze puzzle ode mnie, chętnie otrzymałem sugestie dotyczące ulepszeń!
Scenariusz jest następujący; Pracujesz jako kierownik firmy raftingowej. Każdego ranka dostajesz listę rezerwacji i musisz posortować je na ładunki tratwowe. Napisz program lub funkcję w wybranym języku, który to zrobi za Ciebie.
Każda tratwa może pomieścić maksymalnie nklientów, a każda rezerwacja dotyczy grupy od 1 do nosób (włącznie). Należy przestrzegać następujących zasad;
Żadne grupy nie mogą być podzielone. Jeśli zarezerwowali razem, wszyscy muszą być na tej samej tratwie.
Liczba tratw musi zostać zminimalizowana.
Z zastrzeżeniem dwóch powyższych zasad, grupy muszą być rozmieszczone tak równo, jak to możliwe między tratwami.
Wejścia
Liczba n(możesz założyć, że jest to dodatnia liczba całkowita) i wielkość wszystkich rezerwacji. Może to być tablica, lista lub podobna struktura danych, jeśli Twój język obsługuje takie rzeczy. Wszystkie będą dodatnimi liczbami całkowitymi od 1 do n. Kolejność rezerwacji nie jest zdefiniowana ani nie jest ważna.
Wynik. Lista numerów rezerwacji pogrupowanych w ładunki tratwowe. Grupowanie musi być jednoznacznie wskazane, takie jak;
- lista lub tablica tablic.
- oddzielona przecinkami lista dla każdej tratwy. Nowa linia między każdą tratwą.
To, jak wdrożysz trzecią zasadę, zależy od ciebie, ale może to obejmować znalezienie średniego obłożenia tratwy i zminimalizowanie odchyleń od niej w jak największym stopniu. Oto kilka przypadków testowych.
n Bookings Output
6 [2,5] [5],[2]
4 [1,1,1,1,1] [1,1,1],[1,1]
6 [2,3,2] [2,2],[3]
6 [2,3,2,3] [2,3],[2,3]
6 [2,3,2,3,2] [2,2,2],[3,3]
12 [10,8,6,4,2] [10],[8,2],[6,4]
6 [4,4,4] [4],[4],[4]
12 [12,7,6,6] [12],[7],[6,6]
Obowiązują standardowe zasady, najkrótszy kod wygrywa. Baw się dobrze!
Edytowane; Sugerowany sposób zdefiniowania tak równo, jak to możliwe trzeciej zasady .
Po ustaleniu liczby tratw r(zgodnie z drugą zasadą), średnie obłożenie amożna obliczyć, sumując rezerwacje i dzieląc r. Dla każdej tratwy można znaleźć odchylenie od przeciętnego obłożenia za pomocą d(x) = abs(n(x)-a), gdzie n(x)jest liczba osób w każdej tratwie i 1 <= x <= r. Dla pewnej ciągłej funkcji o pojedynczej wartości f(y), która jest ściśle dodatnia i ma ściśle dodatnią pierwszą i nieujemną drugą pochodną dla wszystkich dodatnich y, definiujemy wielkość nieujemną Fjako sumę wszystkich f(d(x)), 1 <= x <= r. Każdy wybór przydziału tratw, który spełnia dwie pierwsze reguły i gdzie Fjest równy globalnemu minimum, spełni również trzecią zasadę.
g(y) = y(drugiej pochodnej zero) lub g(y) = y²(pierwszej obniżenia zera kiedy y = 0).