Stoję w punkcie (0,0)
na mapie H
x, W
gdzie wysokość jest reprezentowana przez cyfry, na przykład:
1132
2221
1230 # H = 3, W = 4
Chciałbym doświadczyć widoków z każdego szczytu, którym w tym przypadku są obszary o wysokości 3
. Jednak wspinanie się na wzgórza nie jest łatwym zadaniem, a ja również brakuje mi czasu.
Wyzwanie
Wyzwanie polega na znalezieniu najszybszej ścieżki do odwiedzenia wszystkich szczytów i powrotu.
Najkrótszy program wygrywa.
Wkład
- H, W - wysokość i szerokość mapy (liczby całkowite) (opcjonalnie, może to być lista / krotka lub dwa oddzielne wejścia całkowite)
- Mapa, podana w postaci
H
zestawówW
cyfr (0
-9
), w dowolnym dogodnym formacie (lista 2D, ciąg oddzielony znakami nowej linii itp.)
Wydajność
- Najkrótszy czas potrzebny na odwiedzenie każdego szczytu i powrót do punktu początkowego (liczba całkowita)
Warunki
- Wysokość danego obszaru jest reprezentowana przez cyfrę od
0
do9
. - „Szczyt” jest definiowany przez obszar o najwyższej wysokości.
- Ścieżka musi zaczynać się i kończyć w lewym górnym rogu (0,0) .
- Możesz poruszać się tylko do obszarów sąsiadujących z twoim bieżącym obszarem i nie możesz poruszać się po przekątnej.
- Przejście z jednego obszaru do drugiego zajmuje 3 minuty, jeśli nie ma zmiany wysokości.
- Wspinaczka zajmuje 11 minut ; to znaczy przejście z jednego obszaru do drugiego, który jest dokładnie o
1
jednostkę wyżej. - Zejście zajmuje 2 minuty ; to znaczy, przejście z jednego obszaru do drugiego, który jest dokładnie o
1
jednostkę niższy. - Nie możesz poruszać się w obszarach, które są wyższe niż
1
jednostka wyżej lub niżej niż gdzie jesteś. (Nie można przejść z obszaru o wysokości1
do, na przykład, sąsiedniego obszaru z wysokością3
)
- Droga do wszystkich szczytów jest gwarantowana
- Maksymalna liczba pików wynosi
15
.
Próbki
Wkład
4 5
32445
33434
21153
12343
Wydajność
96
Wyjaśnienie
Zaczynasz w lewym górnym rogu 3
. Musisz odwiedzić dwa 5
s, które są zlokalizowane na (0,4)
i (3,3)
i wrócić do 3
na (0,0)
w jak najkrótszym czasie.
3 2 4->4->5
V ^
3->3->4 3 4
2 1 1 5 3
1 2 3 4 3 # 3 + 3 + 11 + 3 + 3 + 11 = 34 minutes to visit 1st peak
3 2 4 4 5
V
3 3 4 3 4
V
2 1 1 5 3
^ V
1 2 3 4<-3 # 2 + 2 + 3 + 11 + 11 = 29 minutes to visit 2nd
3 2 4 4 5
^
3 3 4 3 4
^
2 1 1 5 3
^ V
1<-2<-3<-4 3 # 2 + 2 + 2 + 2 + 11 + 11 + 3 = 33 minutes to come back
# 34 + 29 + 33 = 96 minutes total is the answer
Wkład
2 7
6787778
5777679
Wydajność
75
code-golf
path-finding
puzzle-solver
graph-theory
cozyconemotel
źródło
źródło
Odpowiedzi:
Mathematica
745681 bajtówPodstawową ideą jest wykonanie ważonego wykresu możliwych ruchów. Ciężary to czas potrzebny na przejście z jednego miejsca do drugiego. Ścieżka o najmniejszej wadze będzie najszybsza.
Cyfry wejściowe są umieszczane w prostokątnej tablicy r przez c (rzędy po kolumnach), a następnie w grę wchodzą trzy różne reprezentacje: (1) wykres siatki r przez c, gdzie każdy wierzchołek odpowiada komórce w tablicy, (2) (r c) według (r c) ważonej macierzy przylegania, która przechowuje wagi odpowiadające czasowi potrzebnemu (2, 3 lub 11 minut) na przejście z jednego miejsca (na wykresie siatki) do drugiego, oraz (3) ukierunkowane , ważony wykres przyległości zbudowany z macierzy.
Wykres siatki pomaga określić, które komórki (tj. Które wierzchołki) są możliwe do osiągnięcia z każdego wierzchołka - „możliwe do osiągnięcia”, ponieważ sąsiednia komórka musi znajdować się nie tylko w prawo, w lewo, powyżej lub poniżej danej komórki. Jego wartość musi również znajdować się w odległości 1 jednostki odległości od sąsiada (np. 3 nie łączy się z sąsiadującą 5 lub 1). Jeśli wierzchołek
a
nie jest połączony z wierzchołkiem,b
wówczas komórki macierzy przylegania {a, b} i {b, a} będą miały wartość ∞. Odpowiednio, ważony wykres przylegania nie będzie miał krawędzi od a do b, ani od b do a.Ważony wykres sąsiedztwa służy do określenia minimalnej odległości (
GraphDistance
) i najkrótszej trasy między dowolnymi wierzchołkami. Optymalna ścieżka musi zaczynać się od 1, dotknąć każdego ze szczytów i powrócić do 1. W tym przypadku „najkrótsza trasa” niekoniecznie musi oznaczać najmniej ruchów. Jest to ten, który ma najkrótszy całkowity czas, mierzony wagami krawędzi.Grał w golfa
Dłuższa, bardziej czytelna forma
Testy
96
75
51
Wyjaśnienie
Pomyśl o wierszach 2–5 poniższego tekstu
jako reprezentujący tablicę z 4 wierszami i 5 kolumnami:
gdzie każdy wierzchołek odpowiada cyfrze z tablicy wejściowej: 3 jest w wierzchołku 1, 2 jest w wierzchołku 2, 4 jest w wierzchołku 3, kolejne 4 w wierzchołku 4, 5 w wierzchołku 5 itp. Wykres siatki jest jedynie przybliżony przybliżenie wykresu, do którego dążymy. To jest bezkierunkowe. Ponadto niektóre krawędzie będą niedostępne. (Pamiętaj: nie możemy przejść z pozycji, która jest większa niż 1 jednostka wysokości powyżej lub poniżej bieżącej). Ale wykres siatki pozwala nam łatwo znaleźć te wierzchołki, które znajdują się obok dowolnego wybranego wierzchołka. Zmniejsza to liczbę krawędzi, które musimy wziąć pod uwagę, w pierwszym przykładzie (siatka 4 na 5), z 400 (20 * 20) do 62 (31 * 2 to liczba krawędzi na wykresie siatki). W tym samym przykładzie działa tylko 48 krawędzi; 14 nie są.
Kolejna ważona macierz przylegania 20 na 20 reprezentuje odległość między wszystkimi parami wierzchołków od wykresu siatki.
Kod klucza, który decyduje o numerze, który ma zostać przypisany, znajduje się poniżej.
Komórka {1,2} - w jednym indeksowaniu - zawiera wartość 2, ponieważ przejście z wierzchołka 1 do wierzchołka 2 jest w dół. Komórka {2,1} zawiera 11, ponieważ przejście z wierzchołka 2 do wierzchołka 1 jest pod górę. Trójki w komórkach {1,6} i {6,1} oznaczają, że ruch nie jest ani w górę, ani w dół. Komórka {1,1} zawiera ∞, ponieważ nie jest połączona z samym sobą.
Poniższy wykres pokazuje strukturę leżącą u podstaw powyższego wejścia. Kolorowe strzałki pokazują optymalną ścieżkę od wierzchołka 1 do szczytów (w 5 i 14) i z powrotem do 1. Niebieskie strzałki odpowiadają ruchom na tym samym poziomie (3 min); czerwone strzałki oznaczają wejście (11 minut), a zielone strzałki wskazują zejście (2 minuty).
Ścieżka od wierzchołka 1 (komórka {1,1} do dwóch pików iz powrotem do wierzchołka 1:
96
źródło
Pyth, 92 bajty
Format wejściowy jest DICT mapowania współrzędne wysokościach
{(0, 0): 3, (0, 1): 2, (0, 2): 4, …}
. Znajduje najszybsze ścieżki między wszystkimi parami punktów za pomocą algorytmu Floyda – Warshalla , a następnie minimalizuje całkowity czas pożądanego cyklu we wszystkich permutacjach szczytów.Wypróbuj online
źródło