Spraw, by wąż wypełnił dowolny labirynt (aż utknie).
Wąż
Wąż zaczyna się w danym punkcie początkowym, wskazując WSCHÓD . Porusza się, zawsze mając ścianę lub część ciała bezpośrednio po LEWEJ stronie swojej głowy („ zwolennik reguły ściany lewej ”), dopóki nie utknie, ponieważ wszystkie cztery kierunki wokół jego głowy są zajęte. (Uwaga: utknięty wąż może nie wypełnić całej dostępnej przestrzeni, ale to nie jest cel!)
Wyzwanie
Napisz program lub funkcję, która akceptuje labirynt jako dane wejściowe w postaci tekstu 2D:
- Dane wejściowe mogą być w dowolnym rozsądnym formacie: np. Lista ciągów, pojedynczy ciąg znaków z nowymi liniami, plik.
- Labirynt ma ściany („
#”), puste przestrzenie („”) i dokładnie jeden punkt początkowy („o”). Możesz to zrobić
- albo przyjąć, że pierwszy i ostatni rząd i kolumna są całkowicie ścianami;
- lub załóżmy, że każdy wkład ma domyślną zewnętrzną warstwę ścian
Możesz założyć, że punkt początkowy ma ścianę (lub ukrytą ścianę) bezpośrednio nad nią (PÓŁNOC) i że wąż może wykonać prawidłowy ruch początkowy w kierunku WSCHODNIM lub POŁUDNIOWYM.
- Możesz założyć, że w tekście nie ma żadnych innych znaków (oprócz znaków nowej linii, jeśli ich potrzebujesz).
- Możesz założyć, że wszystkie linie mają tę samą długość.
i drukuje / zwraca „wypełniony labirynt” jako dane wyjściowe, wraz z migawką węża w momencie, gdy utknął :
- Ciało węża jest reprezentowane przez postacie
>v<^wskazujące, gdzie jest jego następny segment - Punktem początkowym węża jest albo jego kierunek na początku („
>”, chyba że musiał natychmiast skręcić), alboopostać (nie trzeba być konsekwentnym) - Punktem końcowym węża jest
opostać
Punktacja
Zwykły kod golfowy: wygrywa najkrótszy kod
Przykład
in:
#################################
# o #
# #
# ## ### ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ### ## #
# ## ##### ## #
# ## ##### ## #
# ## ### ## #
# ## ## #
# #
# #
#################################
out:
#################################
#>>>>>>>>>>>>>>>>>>>v>>>>>>>>>>v#
#^>>>>>>>>>>>>>>>>>v>>>>>>>>>>vv#
#^^ ##>>>>>>v###o>>>>>v## vv#
#^^ ##>^ ##>>>>^## >v## vv#
#^^ ##^ ## ## v## vv#
#^^ ##^ ## ## v## vv#
#^^ ##>^ ## ## >v## vv#
#^^ ##^< ### v<## vv#
#^^ ##^ ##### v## vv#
#^^ ##^ ##### v## vv#
#^^ ##^< ### v<## vv#
#^^ ##^<<<<<<<<<<<<<<<<## vv#
#^^<<<<<<<<<<<<<<<<<<<<<<<<<<<<v#
#^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<#
#################################
Animowane (w celach ilustracyjnych):
Edycja: Należy zauważyć, że w razie wątpliwości, wąż powinien „trzymać swoją lewą rękę” na ścianie już jest, w następstwie kątach, nie skacze do ściany 1 przecznicę od hotelu.
Dziękuję Jonathanowi Allanowi za jego poruszenie, a Draco'owi za powyższą migawkę wyjaśniającą.
Inne przykłady
in:
####################
# o# #
# ###
# #
# ## #
# ###
####################
out:
####################
#>>>>>>>>>>>>>>vv# #
#^>>>>>>>>>>>>vvv###
#^^ v<<<o<<<<v>>v#
#^^<<<<##^<<<<<<v<<#
#^<<<<<<<<<<<<<<<###
####################
in:
####################
# o #####
# #####
# #
# ##
####################
out:
####################
# >>>>v#####
# v#####
# >>>>o#
# ##
####################
in:
################
#o #
# ########## #
# # # #
# # # #
# # # #
# # # # #
# # # #
# # # #
# # # #
# ############ #
# #
################
out:
################
#>>>>>>>>>>>>>v#
#>>v##########v#
#^#>>>>>>>>>v#v#
#^#>>>>>>>>vv#v#
#^#^>>>>>>vvv#v#
#^#^^# vvv#v#
#^#^^o<<<<<vv#v#
#^#^^<<<<<<<v#v#
#^#^<<<<<<<<<#v#
#^############v#
#^<<<<<<<<<<<<<#
################

