Turowe gry taktyczne, takie jak Advance Wars, Wargroove i Fire Emblem, składają się z kwadratowej siatki o zróżnicowanym terenie z jednostkami o różnych klasach ruchu, wymagającymi różnych kosztów dla każdego rodzaju terenu. Będziemy badać podzbiór tego problemu.
Wyzwanie
Twoim zadaniem jest ustalenie, czy do jednej lokalizacji można dotrzeć z innej, biorąc pod uwagę siatkę kosztów terenu i prędkość ruchu.
Jednostki mogą poruszać się ortogonalnie tylko wtedy, gdy koszt przejścia na kwadrat jest wartością odpowiedniej komórki na siatce (ruszenie jest bezpłatne). Na przykład przejście z komórki o wartości 3 na komórkę o wartości 1 kosztuje 1 ruch, ale przejście w drugą stronę wymaga 3. Niektóre kwadraty mogą być niedostępne.
Przykład
1 [1] 1 1 1
1 2 2 3 1
2 3 3 3 4
1 3 <1> 3 4
Przejście z [1]
do <1>
wymaga minimum 7 punktów ruchu, przesuwając się w prawo o jedno pole, a następnie o trzy w dół. Tak więc, jeśli podano 6 lub mniej jako prędkość ruchu, powinieneś dać odpowiedź fałszywą.
Przykładowe przypadki testowe
Będą one używać współrzędnych zero-indeksowanych od lewej do góry (wiersz, kolumna) zamiast komórek w nawiasach początkowych i końcowych, aby ułatwić analizę. Nieosiągalne komórki będą reprezentowane przezX
Przypadek 1a
1 1 2 1 X
1 2 2 1 1
2 1 1 2 1
X X X 1 2
Speed: 5
From (2, 3) to (0, 1)
Output: True
Przypadek 1b
1 1 2 1 X
1 2 2 1 1
2 1 1 2 1
X X X 1 2
Speed: 4
From (2, 3) to (0, 1)
Output: False
Przypadek 1c
1 1 2 1 X
1 2 2 1 1
2 1 1 2 1
X X X 1 2
Speed: 5
From (0, 1) to (2, 3)
Output: False
Przypadek 2a
3 6 1 1 X 4 1 2 1 X
5 1 2 2 1 1 1 X 1 5
2 1 1 1 2 1 1 1 X 1
2 1 1 3 1 2 3 4 1 2
1 1 2 1 1 4 1 1 1 2
3 2 3 5 6 1 1 X 1 4
Speed: 7
From (3, 4) to (2, 1)
Output: True
Przypadek 2b
3 6 1 1 X 4 1 2 1 X
5 1 2 2 1 1 1 X 1 5
2 1 1 1 2 1 1 1 X 1
2 1 1 3 1 2 3 4 1 2
1 1 2 1 1 4 1 1 1 2
3 2 3 5 6 1 1 X 1 4
Speed: 4
From (3, 4) to (2, 1)
Output: False
Przypadek 2c
3 6 1 1 X 4 1 2 1 X
5 1 2 2 1 1 1 X 1 5
2 1 1 1 2 1 1 1 X 1
2 1 1 3 1 2 3 4 1 2
1 1 2 1 1 4 1 1 1 2
3 2 3 5 6 1 1 X 1 4
Speed: 7
From (1, 8) to (2, 7)
Output: True
Przypadek 3a
2 1 1 2
2 3 3 1
Speed: 3
From (0, 0) to (1, 1)
Output: False
Przypadek 3b
2 1 1 2
2 3 3 1
Speed: 3
From (1, 1) to (0, 0)
Output: True
Reguły, założenia i uwagi
- Standardowe luki są zabronione, wejścia / wyjścia mogą mieć dowolny dogodny format
- Możesz założyć, że wszystkie współrzędne są na siatce
- Prędkość ruchu nigdy nie przekroczy 100
- Niedostępne komórki mogą być reprezentowane przez bardzo duże liczby (np. 420, 9001, 1 milion) lub przez 0 lub zero, w zależności od tego, co jest dla ciebie najwygodniejsze.
- Wszystkie dane wejściowe będą składać się z dodatnich liczb całkowitych (chyba że użyjemy null lub 0 do reprezentowania nieosiągalnych komórek)
źródło
Odpowiedzi:
Zapytanie TSQL,
205191 bajtówDane wejściowe to zmienna tabelowa @t
@ x = start xpos, @ y = start ypos @ i = koniec xpos, @ j = koniec ypos @ = prędkość
Wypróbuj wersję online bez golfa
źródło
Python 2 , 220 bajtów
Wypróbuj online!
Bierze tablicę
m
liczb całkowitych, a'X'
jako większy niż wartość 100 ;, prędkościa
,m
o szerokościw
i wysokościh
; i zwraca, gdzie możemy zacząć od zindeksowanej komórki wiersza / kolumny(r,c)
i przejść do ostatniej komórki(R,C)
.Algorytm jest zmodyfikowanym wypełnieniem zalewowym. Nieco golfowy kod:
źródło
JavaScript (ES7),
116113 bajtów(matrix)([endRow, endCol])(speed, startRow, startCol)
Wypróbuj online!
Skomentował
źródło
Galaretka , 59 bajtów
Wypróbuj online!
Niezbyt szybko; wypróbowuje wszystkie ścieżki, aż jednostki prędkości zostaną wyczerpane, nawet cofając się o krok. Pozwala to jednak uniknąć konieczności sprawdzania, czy miejsca są odwiedzane. Dane wejściowe są dostarczane jako
[nrows, ncols],[start_row, start_col],[end_row, end_col],speed,flattened matrix column-major
Wyjaśnienie
Link pomocnika
Główny link
źródło
Galaretka , 38 bajtów
Niezwykle nieefektywny pełny program akceptujący teren (z niewidocznymi jak 101), a następnie początkową i końcową koordynuje następnie prędkość.
Wypróbuj online!(nie ma sensu próbować większości przypadków testowych!)
W jaki sposób?
Tworzy listę wszystkich permutacji dla każdego zestawu sił „wszystkich lokalizacji terenu z wyjątkiem początku i końca”, otacza każdą z nich początkiem i końcem, filtruje te, które wykonują tylko ortogonalne ruchy na odległość 1, opuszcza początek z każdego indeksuje z powrotem w teren, sumuje każdy, przyjmuje minimum, odejmuje jeden i sprawdza, czy jest to prędkość mniejsza niż prędkość.
źródło