Боб был похищен и застрял в лабиринте. Ваша задача - помочь ему найти выход. Но так как это очень темный и страшный лабиринт, он ничего не видит. Он может чувствовать стены, только когда наталкивается на него, и знает, когда он нашел выход, но больше ничего не знает об этом.
Поскольку он должен запускать вашу программу по памяти, она должна быть максимально короткой.
Примечание: я взял эту проблему с http://acmgnyr.org/year2016/problems.shtml , но немного ее адаптировал и сам написал программу / тестовые задания для судей.
Спецификация
- Это интерактивная проблема, поэтому ваша программа будет выводить ходы на стандартный вывод и получать ответы от стандартного ввода.
- Ваша программа может выводить один из ходов
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
все еще доступны, так как я еще не переехал с этой площади?