Боба викрали і застрягли в лабіринті. Ваше завдання - допомогти йому знайти вихід. Але оскільки це дуже темний і страшний лабіринт, він нічого не може побачити. Він може відчувати стіни лише тоді, коли набігає на нього, і знає, коли знайшов вихід, але нічого іншого не знає.
Оскільки він повинен запускати вашу програму по пам'яті, вона повинна бути якомога коротшою.
Примітка. Я взяв цю проблему з http://acmgnyr.org/year2016/problems.shtml , але трохи її адаптував, і сам написав програму / тестові справи судді.
Специфікація
- Це інтерактивна проблема, тому ви програму буде виводити рухи до stdout і приймати відповіді від stdin.
- Ваша програма може виводити один з ходів
right
,left
,down
,up
. - Потім він отримає як вхід одне з наступних:
wall
- це означає, що Боб вдарився об стіну. Боб залишиться там же.solved
- Боб знайшов вихід! Тепер ваша програма також повинна вийти, не друкуючи нічого іншого.ok
- Боб зміг рухатися в заданому напрямку.
- Якщо в лабіринті немає виходу, ваша програма повинна вийти,
no exit
щоб повідомити Бобу, що він повинен відмовитися. Потім ваша програма повинна вийти, не друкуючи нічого іншого. - Оскільки Боб поспішає виходити, ваша програма не повинна робити жодних сторонніх рухів. Іншими словами, вашій програмі не дозволяється двічі рухатися в одному напрямку з одного і того ж квадрата .
- Це код-гольф , тому найкоротша програма виграє!
Приклади
У наступних прикладах S
- початковий квадрат, X
це вихід, #
є стіна, а пробіли - допустимі квадрати. Оскільки немає єдиної правильної відповіді, це лише приклади виконання рішення. Також зауважте, що малюнки лабіринту є саме для вас, і ваша програма не отримає їх як вхідні дані.
########
#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
Програма перевірки
- Я написав перевірку рішень у Python. Ви можете знайти його за посиланням https://gist.github.com/Maltysen/f0186019b3aa3812d812f8bb984fee19 .
- Виконайте це як
python mazechecker.py ./mazesolver
. - Він перевірить вашу програму на всіх лабіринтах у папці під назвою
mazes
. - Лабіринти знаходяться в окремих файлах у тому самому форматі зверху.
- Він перевіряє всі перераховані вище умови та повідомляє вас, якщо ваше рішення порушує будь-які.
- Ви можете надрукувати додаткову діагностичну інформацію
python mazechecker.py -d ./mazesolver
. - Ви можете знайти архівну
mazes
папку тут . Ви також можете додати до нього свій власний, якщо хочете.
solved
при виведенні no exit
? Якщо так, будь ласка, вкажіть це в правилах, а не тільки в тестових випадках!
x,y
та йдіть up
, відповідайте wall
, потім right
знову відповідайте wall
, чи можу я спробувати up
ще раз, або доступні лише left
та down
є, оскільки я ще не переїхав з цієї площі?