Twoim celem jest napisanie programu, który utworzy losową mapę 10x10 za pomocą 0
, 1
i 2
, i znajdzie najkrótszą ścieżkę od górnego lewego do prawego dolnego, zakładając, że:
0 oznacza pole trawiaste: każdy może po nim chodzić;
1 oznacza ścianę: nie można jej przekroczyć;
2 reprezentuje portal: wchodząc do portalu możesz przejść do dowolnego innego portalu na mapie.
Okular:
- Lewy górny element i prawy dolny element muszą mieć wartość 0 ;
- Podczas tworzenia losowej mapy każde pole powinno mieć 60% szansy na 0 , 30% na 1 i 10% na 2 ;
- Możesz poruszać się po dowolnym sąsiednim polu (nawet ukośnym);
- Twój program powinien wypisać mapę i liczbę kroków najkrótszej ścieżki;
- Jeśli nie ma prawidłowej ścieżki prowadzącej do prawego dolnego pola, twój program powinien wypisać tylko mapę;
- Możesz użyć dowolnego zasobu, który chcesz;
- Najkrótszy kod wygrywa.
Obliczanie kroków:
Krok jest rzeczywistym ruchem; za każdym razem, gdy zmieniasz pole, zwiększasz licznik.
Wynik:
0000100200
0100100010
1000000111
0002001000
1111100020
0001111111
0001001000
0020001111
1100110000
0000020100
9
code-golf
path-finding
maze
Vereos
źródło
źródło
Odpowiedzi:
GolfScript, 182 znaki
Przykłady:
źródło
Matematyka (344)
Bonus: wyróżnienie ścieżki
Tworzę wykres wszystkich możliwych filmów do sąsiednich wierzchołków i dodam wszystkie możliwe „teleporty”.
źródło
Mathematica,
208202 znakówOprzyj się na rozwiązaniach Davida Carrahera i Ybeltukova. I dzięki sugestii Ybeltukova.
źródło
n/n
zamiastn/10
:)〚 〛
w nawiasach (to poprawne symbole Unicode)Norm[# - #2] & @@ # < 2 || # \[Union] u == u &
Norm[# - #2] & @@ # < 2
oznacza, że odległość między dwoma punktami jest mniejsza niż 2, więc muszą się one sąsiadować.# ⋃ u == u
oznacza, że oba punkty są w tobie.Python 3, 279
Niektóre warianty Dijkstra. Brzydkie, ale grałem w golfa tak bardzo, jak tylko mogłem ...
Przykładowy przebieg
źródło
Mathematica
316 279275Podstawowym obiektem jest tablica 10x10 z około 60 0, 30 1 i 10 2. Tablica służy do modyfikacji 10x10
GridGraph
, z połączonymi wszystkimi krawędziami. Te węzły, które odpowiadają komórkom zawierającym 1 w tablicy są usuwane z wykresu. Wszystkie węzły „posiadające 2” są ze sobą połączone. Następnie szukana jest Najkrótsza Ścieżka między wierzchołkiem 1 a wierzchołkiem 100. Jeśli taka ścieżka nie istnieje, mapa jest zwracana; jeśli taka ścieżka istnieje, wyświetlana jest mapa i najkrótsza długość ścieżki.Przykładowy przebieg :
źródło
Python (1923)
Wyszukiwanie powrotneTrzeba przyznać, że nie jest to najkrótsza ani najwydajniejsza, choć istnieje pewna zapamiętywanie.
źródło
JavaScript (541)
Generowanie wykresu następuje w pierwszych pięciu wierszach.
f
zawiera pola,p
zawiera portale. Rzeczywiste wyszukiwanie jest realizowane przez BFS.Przykładowe dane wyjściowe:
źródło
Python 3 (695)
Dijkstra!
Przykładowe dane wyjściowe:
źródło
Python, 314
To obrzydliwe wdrożenie Bellman-Ford. Ten algorytm to O (n ^ 6)! (Co jest w porządku dla n = 10)
źródło
print '\n'.join(map(str,a))
; Zrobiłemprint a
ze względu na golfa.r*10
ma 100 elementów).