Zasady:
W tej grze zaczynasz na szczycie prostokątnej siatki o wymiarach N x M złożonej ze ścian i otwartych przestrzeni. Dane wejściowe to N wierszy M znaków, gdzie znak .
określa otwartą przestrzeń, a x
ścianę. Twój program powinien wypisać najmniejszą liczbę K, tak aby istniała ścieżka od lewego górnego rogu do prawego dolnego rogu (bez przekątnych), która przecina ściany K.
Na przykład, biorąc pod uwagę dane wejściowe:
..x..
..x..
xxxxx
..x..
..x..
twój program powinien wypisać 2
.
Inne przykłady:
wyjście 4
:
xxxxx
x.x.x
x.x.x
x..xx
wyjście 0
:
.xxxxxxxx
.x...x...
.x.x.x.x.
.x.x...x.
...xxxxx.
wyjście 6
:
xx
xx
xx
xx
xx
Dodatkowe ciekawostki:
Jeśli to ułatwi ci życie, możesz określić N i M jako parametry wiersza poleceń.
Dodatkowy kredyt, jeśli Twój program może wydrukować ścieżkę w takiej lub innej formie.
Odpowiedzi:
Rubinowy 1,9
(235)(225)(222)(214)Nie wiem, czy jest to krótszy program niż program oparty na Dijkstrze, ale pomyślałem, że spróbuję innego podejścia. Używa wyrażenia regularnego w pętli, aby zaznaczyć każdą przestrzeń minimalną liczbą ścian wymaganych do jej osiągnięcia.
Dane wejściowe są określone jako plik w wierszu poleceń, tj
Nie golfowany:
źródło
Perl 5.10 (164)
Bardzo podobnie jak rozwiązanie migimaru, tylko z tym dodatkowym dotykiem Perla. 5.10 jest potrzebne dla
\K
ws///
.źródło
Python
406378360348418 znakówUproszczona Dijkstra, ponieważ ruchy z ciężarem są na
x
polu. Odbywa się to w „falach”, pierwszej pętli, w której znajdują się.
pola dotykające przodu i ustawia się je na tej samej wadze, niż raz znajdowałyx
pola dotykające przodu i ustawiały je na+1
wadze. Powtarzaj, dopóki nie będzie już niewidzianych pól.Na koniec znamy wagę dla każdego pola.
Dane wejściowe są określone jako plik w wierszu poleceń:
Aktualizacja: drukuje ścieżkę.
źródło
Wersja C ++ (
610607606584)Implementuje algorytm Dijkstry.
Bez golfa:
źródło