Bob został porwany i utknął w labiryncie. Twoim zadaniem jest pomóc mu znaleźć wyjście. Ale ponieważ jest to bardzo mroczny i przerażający labirynt, nic nie widzi. Czuje ściany tylko wtedy, gdy do nich podbiega, i wie, kiedy znalazł wyjście, ale nic więcej nie wie.
Ponieważ musi on uruchamiać Twój program według pamięci, musi on być jak najkrótszy.
Uwaga: wziąłem ten problem z http://acmgnyr.org/year2016/problems.shtml , ale nieco go dostosowałem i sam napisałem program oceniania / przypadki testowe.
Specyfikacja
- Jest to problem interaktywny, więc program wypisze ruchy na standardowe wyjście i przyjmie odpowiedzi ze standardowego wejścia.
- Twój program może jedno wyjście z ruchów
right
,left
,down
,up
. - Otrzyma wtedy jako dane wejściowe jedno z poniższych:
wall
- oznacza to, że Bob uderzył w ścianę. Bob pozostanie w tym samym miejscu.solved
- Bob znalazł wyjście! Twój program powinien teraz również wyjść bez drukowania czegokolwiek innego.ok
- Bob był w stanie poruszać się w danym kierunku.
- Jeśli labirynt nie ma wyjścia, twój program powinien wypisać,
no exit
aby Bob wiedział, że powinien się poddać. Twój program powinien następnie wyjść bez drukowania niczego innego. - Ponieważ Bobowi spieszy się z wydostaniem się, twój program nie powinien wykonywać żadnych obcych ruchów. Innymi słowy, twój program nie może poruszać się dwa razy w tym samym kierunku z tego samego kwadratu .
- To jest golf golfowy , więc wygrywa najkrótszy program!
Przykłady
W poniższych przykładach S
jest kwadratem początkowym, X
wyjściem, #
ścianą, a spacje są prawidłowymi kwadratami. Ponieważ nie ma jednej poprawnej odpowiedzi, są to tylko przykładowe przebiegi rozwiązania. Zauważ też, że rysunki labiryntu są właśnie tam, abyś mógł je zobaczyć, a twój program nie otrzyma ich jako danych wejściowych.
########
#S #
###### #
# #
#X#
right
ok
right
ok
right
ok
right
ok
right
ok
right
wall
down
ok
right
wall
down
ok
right
wall
down
solved
#####
# S #
#####
right
ok
right
wall
down
wall
up
wall
left
ok
down
wall
up
wall
left
ok
down
wall
up
wall
left
wall
right
ok
no exit
solved
###############################
#S #
############## ### #
# #X# #
# #
##################
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
wall
down
ok
right
wall
down
ok
right
wall
down
ok
right
wall
down
wall
left
ok
down
wall
up
ok
up
ok
left
ok
down
ok
down
ok
down
wall
left
ok
down
wall
up
ok
up
ok
left
ok
down
ok
down
ok
down
wall
left
ok
down
wall
up
ok
up
ok
left
wall
down
ok
left
wall
down
ok
left
ok
down
wall
up
wall
left
ok
down
wall
up
solved
Program sprawdzający
- Napisałem narzędzie do sprawdzania rozwiązań w Pythonie. Można go znaleźć na https://gist.github.com/Maltysen/f0186019b3aa3812d812f8bb984fee19 .
- Uruchom to jak
python mazechecker.py ./mazesolver
. - Testuje twój program na wszystkich labiryntach w folderze o nazwie
mazes
. - Labirynty znajdują się w osobnych plikach w tym samym formacie od góry.
- Sprawdza wszystkie warunki wymienione powyżej i powiadamia cię, jeśli Twoje rozwiązanie narusza którekolwiek.
- Możesz wydrukować dodatkowe informacje diagnostyczne za pomocą
python mazechecker.py -d ./mazesolver
. - Możesz znaleźć spakowany
mazes
folder tutaj . Możesz także dodać własne, jeśli chcesz.
solved
wyjściową no exit
? Jeśli tak, proszę podać to w regulaminie, nie tylko w przypadkach testowych!
x,y
i idę up
z odpowiedzią wall
, a następnie right
z odpowiedzią wall
, czy mogę spróbować up
ponownie, czy są dostępne tylko left
i down
nadal, ponieważ nie przeprowadziłem się jeszcze z tego kwadratu?