Wydaje mi się, że wpadłem w zalew. Dosłownie Upuściłem kilka pikli na podłogę, a teraz wszystkie są rozrzucone! Musisz mi pomóc zebrać je wszystkie. Och, czy wspominałem, że mam do dyspozycji kilka robotów? (Wszystkie są też rozrzucone po całym mieście; jestem naprawdę kiepski w organizowaniu rzeczy.)
Musisz wziąć wkład w postaci:
P.......
..1..2..
.......P
........
P3PP...4
.......P
czyli wielokrotne linie albo .
, P
(ogórek) lub cyfra (ID robota). (Możesz założyć, że każda linia ma równą długość, .
jest uzupełniona.) Możesz wprowadzić te linie jako tablicę, lub slurp ze STDIN, lub odczytać w oddzielonym przecinkami pojedynczym wierszu, lub odczytać plik, lub zrobić cokolwiek byś zrobił lubię brać wkład.
Twój wynik musi mieć postać n
linii, gdzie n
jest najwyższy identyfikator robota. (Identyfikatory robotów będą zawsze sekwencyjne, zaczynając od 1.) Każda linia będzie zawierać ścieżkę robota, utworzoną z liter L
(po lewej), R
(po prawej), U
(w górę) i D
(w dół). Na przykład oto przykładowy wynik dla tej układanki:
LLU
RDR
LRRR
D
Może być również
LLU RDR LRRR D
Lub
["LLU","RDR","LRRR","D"]
Lub dowolny format, który chcesz, pod warunkiem, że możesz powiedzieć, jakie powinno być rozwiązanie.
Twoim celem jest znalezienie optymalnej wydajności, która ma najmniejszą liczbę kroków. Ilość kroków jest liczona jako największa liczba kroków ze wszystkich robotów. Na przykład powyższy przykład miał 4 kroki. Pamiętaj, że może istnieć wiele rozwiązań, ale wystarczy tylko jedno z nich.
Punktacja:
- Twój program zostanie uruchomiony z każdym z 5 (losowo wygenerowanych) przypadków testowych.
- Musisz dodać kroki z każdego biegu, a to będzie twój wynik.
- Wygra najniższy łączny łączny wynik.
- Nie można na stałe kodować tych konkretnych danych wejściowych. Twój kod powinien także działać z innymi wejściami.
- Roboty mogą się przenikać.
- Twój program musi być deterministyczny, tj. Taki sam wynik dla każdego uruchomienia. Możesz użyć generatora liczb losowych, o ile jest on rozstawiony i konsekwentnie wytwarza te same liczby na różnych platformach.
- Twój kod musi zostać uruchomiony w ciągu 3 minut dla każdego wejścia. (Najlepiej znacznie mniej.)
- W przypadku remisu większość zwycięstw wygra.
Oto przypadki testowe. Zostały wygenerowane losowo za pomocą małego skryptu Ruby, który napisałem.
P.......1.
..........
P.....P...
..P.......
....P2....
...P.P....
.PP..P....
....P....P
PPPP....3.
.P..P.P..P
....P.....
P....1....
.P.....PP.
.PP....PP.
.2.P.P....
..P....P..
.P........
.....P.P..
P.....P...
.3.P.P....
..P..P..P.
..1....P.P
..........
.......2P.
...P....P3
.P...PP..P
.......P.P
..P..P..PP
..P.4P..P.
.......P..
..P...P...
.....P....
PPPP...P..
..P.......
...P......
.......P.1
.P..P....P
P2PP......
.P..P.....
..........
......PP.P
.P1..P.P..
......PP..
P..P....2.
.P.P3.....
....4..P..
.......PP.
..P5......
P.....P...
....PPP..P
Powodzenia i nie pozwól, aby pikle siedzieli tam zbyt długo, bo inaczej się zepsują!
Aha, a dlaczego pikle, pytasz?
Dlaczego nie?