W tym repozytorium znajduje się program do przetestowania rozwiązań poniżej opisanego problemu.
Żeby odpalić testerkę, należy zainstalować na maszynie platformę Java 1.8
oraz Maven
i odpalić w terminalu z katalogu z testerką
mvn install
To polecenie ściągnie wszystkie zależności systemu i zainstaluje ich lokalnie.
WAŻNE: Przed odpalaniem testerki należy zmienić ścieżki do kompilatorów, zgodnie z ustaleniami systemu operacujnego (plik rush-hour-webapp/src/main/resources/app.properties
; przykład - w pliku rush-hour-webapp/src/main/resources/app.properties.example
).
Samo odpalanie testerki jest zrobione poleceniem z katalogu rush-hour-webapp
mvn exec:java
Po tym można wejść na stronę http://localhost:4567/ i wysyłać rozwiązania.
Plansza o wymiarach 6x6 zawiera N
samochodów. Samochody na planszy są ustawione w pionie albo w poziomie, oraz zajmują dwa lub trzy pola na planszy.
Adres pola planszy składa się z punktu (x, y)
, gdzie x i y są z przedziału [0, 5]
oraz lewy dolny róg planszy ma współrzędne (0, 0)
natomiast prawy górny róg współrzędne (5, 5)
.
Samochody mogą się poruszać tylko do przodu lub w tyłu zgodnie ze swoim położeniem. Samochody nie mogą wyjeżdzać poza granice planszy lub najeżdzać na siebie.
Samochód oznaczony identyfikatorem X
, który musi osiągnąć pole o adresie (5, 3)
jednym swoim końcem.
Pod uwagę będzie brana również pojedyncza liczba przesunięć każdego samochodu, tj. ruch samochodu w prawo o x
pól będzie liczony jako x
.
Dane do zadania są przekazywane przez standardowe wejście.
Algorytm jest uruchamiany kilkukrotnie z przykładami testowymi o różnej trudności. Pierwsza linia zawiera liczbę przypadków testowych Każdy przypadek testowy rozpoczyna się od liczby n samochodów na planszy. Kolejne n lini zawierają opis każdego samochodu w postaci:
[id] [start point] [direction] [length]
[id]
- identyfikatorem samochodu jako duża litera[start point]
- punkt znajdujący się najblizej w pionie i poziomie do punktu(0, 0)
[direction]
- polozenie samochodu wartosciV
alboH
[length]
- dlugość samochodu
Dla każdego przypadku testowego należy wyświetlić w jednej lini liczbę n kroków oraz n linii ruchów samochodów po planszy. Liczba kroków oraz kroki powinny zostać przekazana na standardowe wyjście.
Ograniczenie na czas wykonania programu - 30 sec
.
TBD
1
3
X 0 3 H 2
A 4 1 H 2
C 4 2 V 3
3
A L 2
C D 2
X R 4
Rozwiązania składa się z trzech ruchów o wartościach kolejno 2, 2, 4
. Zatem liczba pojedynczych ruchów dla tego rozwiązania jest równa 8
.
Samochody w kolejnych ruchach znajdowały się na odpowiednich pozycjach.
+-+-+-+-+-+-+
| | | | | | |
+-+-+-+-+-+-+
| | | | |c| |
+-+-+-+-+-+-+
|x|x| | |c| |
+-+-+-+-+-+-+
| | | | |c| |
+-+-+-+-+-+-+
| | | | |a|a|
+-+-+-+-+-+-+
| | | | | | |
+-+-+-+-+-+-+
+-+-+-+-+-+-+
| | | | | | |
+-+-+-+-+-+-+
| | | | |c| |
+-+-+-+-+-+-+
|x|x| | |c| |
+-+-+-+-+-+-+
| | | | |c| |
+-+-+-+-+-+-+
| | |a|a| | |
+-+-+-+-+-+-+
| | | | | | |
+-+-+-+-+-+-+
+-+-+-+-+-+-+
| | | | | | |
+-+-+-+-+-+-+
| | | | | | |
+-+-+-+-+-+-+
|x|x| | | | |
+-+-+-+-+-+-+
| | | | |c| |
+-+-+-+-+-+-+
| | |a|a|c| |
+-+-+-+-+-+-+
| | | | |c| |
+-+-+-+-+-+-+
+-+-+-+-+-+-+
| | | | | | |
+-+-+-+-+-+-+
| | | | | | |
+-+-+-+-+-+-+
| | | | |x|x|
+-+-+-+-+-+-+
| | | | |c| |
+-+-+-+-+-+-+
| | |a|a|c| |
+-+-+-+-+-+-+
| | | | |c| |
+-+-+-+-+-+-+
- C++
- C# (Win10x64, min .Net 4.0 x86)
- Java (jdk1.7, jdk1.8)
- Python (python2.7, python3.4)
W przypadku pytań, niejasności czy bugów proszę sprawdzić FAQ lub w przypadku braku odpowiedzi stworzyć issue lub kontaktować się mailowo. FAQ będzie stopniowo rozwijane na podstawie zadawanych pytań. Możliwe są pewne zmiany w zakresie problemu zadania ze względu na zgłoszone uwagi