Wprowadzenie
Wszyscy wiedzą, że możliwość udanej nawigacji po polu asteroid wynosi około 3720 do 1. Ale pomimo twojego ostrzeżenia Han Solo wciąż chce spróbować szczęścia.
Bojąc się o swoje sztuczne życie, decydujesz się na kodowanie, w specyficznym dialekcie statku ( czytaj: preferowany język Code Golf ), program unikania planetoid, który zadecyduje, którą ścieżką wybrać się w labirynt ASCII pola asteroid.
Wkład
Millenium Falcon ma program do mapowania pól asteroid, który daje dane podobne do tego:
| ##### ######### |
| ###### # ### # |
| # # # # #### # |
@ ## ####
|# # # ### ## |
|## ## #### # # |
|#### ##### # ## |
Górne rzędy są po lewej stronie Sokoła, dolne rzędy po prawej stronie Sokoła, a kolumny reprezentują to, co znajduje się przed statkiem.
- Każdy
#
jest przeszkodą. - Każde pole to puste miejsce, w które może latać statek.
- Dane wejściowe mają zawsze wysokość 7 znaków. Jest to limit szerokości mapowania asteroid.
- Dane wejściowe mają zawsze 32 znaki (30 dla samego pola i 2 dla początkowego i końcowego limitu). Jest to limit głębokości mapowania asteroid. Pionowe paski
|
oznaczają początek i koniec mapowania. @
jest Sokół. Zawsze znajduje się w środkowym rzędzie (czwarty rząd) i pierwszej kolumnie na wejściu.- Przestrzeń pozostawiona w pionowych słupkach w ostatniej kolumnie to miejsce, do którego statek musi dotrzeć. Zawsze znajduje się w środkowym rzędzie (czwarty rząd) i ostatniej kolumnie na wejściu.
Dane wejściowe można traktować jako ciąg wieloliniowy, tablicę ciągów, ze STDIN lub parametrów funkcji, lub odczytać z pliku.
Możliwe manewry
Ścigają cię TIE-Fighters, dlatego zawsze musisz iść do przodu. Istnieją zatem trzy sposoby, w jakie statek może latać na każdym kroku:
-
Naprzód/
Naprzód i skręć w lewo\
Naprzód i skręć w prawo
Na przykład są to prawidłowe ścieżki:
@---
--
/ \ /
@ -
-
/ \
/ \
@ \
Jak widać, zawsze jest dokładnie jeden ruch na kolumnę. Sokół jest śmieciem, dlatego nie może wykonywać gwałtownych zwrotów. Co oznacza, że ruchy takie jak /\
lub \/
są niedozwolone . Musi być co najmniej jeden czysty ruch do przodu -
między dwoma przeciwnymi zwrotami. Z drugiej strony, jak pokazano powyżej, możliwe jest obrócenie w jedną stronę wielu kroków z rzędu.
Falcon ulega awarii, jeśli jeden ruch prowadzi statek do miejsca, w którym znajduje się przeszkoda. Na przykład te ruchy prowadzą do awarii:
@-#
@
\
#
#
/
@
Pamiętaj, że to nie jest awaria:
@-#
\
-
Wydajność
Musisz wypisać to samo pole asteroid ASCII, z prawidłową ścieżką do końca. Sokół musi być wydrukowany w miejscu końcowym zamiast w miejscu początkowym.
Na przykład poprawne dane wyjściowe dla podanego wcześniej przykładu wejściowego to:
| ##### ######### |
| ###### #-------- ### # |
| # # #/ # ####\ # |
--------- ## \ #### ----@
|# # # ### \ ## / |
|## ## #### \ #/ # |
|#### ##### #-- ## |
Twoja ścieżka musi tylko nie rozbić sokoła. Nie musi to być najkrótsza możliwa ścieżka.
Możesz założyć, że zawsze będzie co najmniej jedna możliwa ścieżka do końca.
Możesz wyprowadzać dane do STDOUT, w pliku lub dowolnym równoważniku, o ile pole asteroid jest drukowane dokładnie tak, jak w tym poście (np. Podanie listy współrzędnych dla ścieżki jest nieprawidłowe).
Przypadki testowe
Normalne pole asteroid
| ##### ######### | | ###### # ### # | | # # # # #### # | @ ## #### |# # # ### ## | |## ## #### # # | |#### ##### # ## |
Możliwe wyjście
| ##### ######### | | ###### #-------- ### # | | # # #/ # ####\ # | --------- ## \ #### ----@ |# # # ### \ ## / | |## ## #### \ #/ # | |#### ##### #-- ## |
Hiperregularne pole asteroid
|# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # | @ # # # # # # # # # # # # # # |# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # |
Możliwe wyjście
|# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # | -# #-# #-# #-# #-# #-# #-# #--@ |#\#/#\#/#\#/#\#/#\#/#\#/#\#/# | | #-# #-# #-# #-# #-# #-# #-# #| |# # # # # # # # # # # # # # # |
Rdzeń gwiazdy śmierci
| # # # # | | # # # | | # # # # # | @ # # # # # | # # # # | | # # # # # | | # # # # |
Możliwe wyjście
| # # # -- # | | --- # # / #\ - | | / #\ # # / # \ /#\ | - # \ # #/ # - # ----@ | # \ # ---- # # | | # \#/ # # # | | # - # # # |
Rów gwiazdy śmierci
|##############################| |##############################| |##############################| @ |##############################| |##############################| |##############################|
Wydajność
|##############################| |##############################| |##############################| ------------------------------@ |##############################| |##############################| |##############################|
Jaskinia asteroid
|### ##########################| |## # ############### ## ######| |# ### ######## ### ## # #####| @ ###### ###### ### ## ### |######## ### ### ## #########| |########## # ### ## ##########| |########### #####|
Możliwe wyjście
|###-##########################| |##/#\############### ##-######| |#/###--######## ### ##/#\#####| -######\###### ### ##/###-----@ |########--### ### ##/#########| |##########\# ### ##/##########| |###########-------- #####|
Punktacja
R2D2 jest zajęty pływaniem na bagnach, więc będziesz musiał sam zaprogramować kontroler Sokoła, co jest uciążliwe. Dlatego wygrywa najkrótszy kod .
-
na każdym zakręcie ma ścieżkę, która jest definiowana jako ruch „do przodu”. Ale rzeczywiste ruchy są zawsze dwie ukośne w lewo, a następnie dwie ukośne w prawo.