Jako roadie zespołu musisz spakować ciężarówkę. Twój program umieści paczki tak, aby zmieściły się na najmniejszej wysokości.
Źle zapakowana ciężarówka
Zasady
Paczki można obracać o wielokrotności 90 stopni. Paczki mogą się dotykać, ale nie mogą się pokrywać.
Wynikiem jest przepakowany obraz (do pliku lub standardowego wyjścia). Twój program może używać dowolnego wejściowego lub wyjściowego formatu obrazu rastrowego.
Twój program musi akceptować dowolną liczbę paczek o różnych kształtach w obrazach do 4000 x 4000 pikseli. Ten obraz testowy nie może być zakodowany na stałe. Jeśli podejrzewam, że jakiekolwiek zgłoszenie zostanie dostosowane do tego konkretnego obrazu, zastrzegam sobie prawo do zastąpienia go nowym obrazem testowym.
Wynik
Twój wynik to najmniejsza wysokość prostokąta, który będzie zawierał Twoje ustawienie (szerokość to szerokość wejściowego prostokąta). W przypadku remisu wygrywa najwcześniejszy wpis.
Standardowe luki są jak zwykle zabronione.
źródło
Odpowiedzi:
Język: Java
Wynik:
555533Po prostu poszedłem za próbą rozwiązania brutalnej siły przez iterację kształtów w kolejności malejącej powierzchni (obwód w przypadku wiązania) i wypróbowanie wszystkich możliwości pakowania, aż do znalezienia prawidłowego pakowania dla tego kształtu, w którym to miejscu pozycja kształtu jest ustalona i algorytm przechodzi do następnego kształtu. Aby, miejmy nadzieję, poprawić jakość wyniku przy poszukiwaniu prawidłowego opakowania, najpierw wypróbowuje się wszystkie możliwe pozycje z obróconym kształtem, tak aby był on wyższy niż szerszy.
Uwaga: zakłada się, że obrazy wejściowe mają wszystkie kształty oddzielone białą spacją. Przyjmuje maksymalną szerokość wyniku jako pierwszy argument i listę obrazów kształtów jako pozostałych argumentów (każdy obraz kształtu może mieć jeden lub więcej kształtów oddzielonych co najmniej jedną linią białych pikseli)
Rozwiązanie, które tworzy (zajmuje około
4 minut30 sekund na moim komputerze) to:Patrząc na to zdjęcie, wydaje się, że wynik można poprawić, iterując wszystkie kształty po spakowaniu i próbując je nieco podnieść. Może spróbuję to zrobić później.źródło