Ты мышь. Все ваши друзья-мыши были захвачены, находятся в бессознательном состоянии и попали в лабиринт, в котором есть только один вход / выход. У вас получилась отличная карта лабиринта, так что вы можете найти решение, чтобы спешить и отнести их всех в безопасное место. Тем не менее, лабиринт охраняется системой безопасности, которая будет вызывать предупреждение, если будет достигнут порог 1000
, в результате чего вы будете захвачены и провалите свою спасательную миссию.
Из ваших предыдущих исследований лабиринта каждый квадрат, который вы делаете (т.е. каждое горизонтальное или вертикальное движение - мыши не могут двигаться по диагонали ) добавляет 1
счетчика системы безопасности. Однако, если вы несете вес (блок динамита или мышь без сознания), он вместо этого добавляет, 2
поскольку обнаруживает дополнительное давление. Квадрат входа / выхода не имеет этой системы безопасности, и поэтому не добавляет к прилавку.
У вас есть неограниченный запас динамита, который вы принесли на вход, так что вы можете просто взорвать все стены, чтобы освободить своих друзей. Но вы должны быть осторожны с этим, так как каждый взрыв добавляет 50
к счетчику от сотрясения давления. Кроме того, вы можете носить только одну вещь за один раз, одну мышь или один блок динамита. Поскольку каждый блок динамита может взорвать только одну стену, это означает, что если в стенке несколько стен, вам нужно с пустыми руками вернуться ко входу, чтобы захватить больше.
Проработанный пример
Предположим, наш лабиринт выглядит следующим образом:
######
#M# E#
######
Я буду использовать c
для счетчика. Мы начинаем с E
ntrance, передвигаясь на одну клетку влево, неся динамит c=2
. Мы взрываем динамит, чтобы взорвать стену c=52
. Мы перемещаем два квадрата влево, с пустыми руками, чтобы получить c=54
, и теперь мы стоим на квадрате мыши. Мы подбираем нашего друга и перемещаем 3 квадрата обратно к E
кситу, но последний квадрат не считается, так как у него нет датчиков, так что это всего 2 квадрата с чем-то на нашей спине. Это означает, что когда мы дойдем до выхода с последней мышью c=58
, которой меньше 1000
, и, следовательно, миссия выполнена успешно.
Вызов
Учитывая входной лабиринт, укажите, можете ли вы, герой мыши, успешно спасти всех пойманных в ловушку мышей в рамках ограничений, описанных выше, или же миссия провалена.
вход
- Двухмерный лабиринт в любом приемлемом формате (многострочная строка, массив строк и т. Д.).
- Для этой задачи я буду использовать
#
как внутренние, так и внешние стены,M
для друзей-мышки иE
для входа. - Вход никогда не будет непосредственно примыкать к внутренней стене (всегда будет хотя бы одно пространство, в котором можно свободно перемещаться).
- Вы можете заменить любые печатные символы ASCII, какие пожелаете, при условии их согласованности. Это действительно позволяет использовать два различные символ для внутренних стен против наружных стен, так долго , как вы поддерживать согласованность (например, если вы решили использовать
@
для внутренних стен вместо и оставить#
на внешний вид, каждая внутренняя стенка должна быть@
и каждая внешняя стена#
). - Лабиринт всегда будет полностью ограничен стенами, но не обязательно будет прямоугольным. При желании вы можете предположить, что лабиринт дополнен пробелами для прямоугольного ввода (необязательно).
- Лабиринт может иметь разделы, которые недоступны без динамита.
- Вы не можете динамить внешние стены лабиринта.
Выход
Truthy / falsey значение. Правда для «Да, мышь может спасти любую другую мышь» или Falsey для «Нет, сигнализация будет отключена».
Правила
- Либо полная программа или функция приемлемы.
- Стандартные лазейки запрещены.
- Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).
Примеры
Правдивые примеры, разделенные пустыми строками.
#####
#M E#
#####
######
#M# E#
######
########
#E # M#
# # #
# # #
# #
########
#############################
# ## # # #
# M ## M # # #
# ## # M # E #
#M ## # # #
#############################
###############
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMM MM#
#MMMMMMMMMMMME#
###############
Ложные примеры, разделенные пустыми строками
#############################
#M ## ## ## #
# M ## M ## ## #
# ## ## M ## E #
#M ## ## ## #
#############################
#############################
########
########
# # #
# M # M#
########
#####
# M #
#####
#####
#####
#####
###################
# # # ## ## # # #
#M#M#M## E ##M#M#M#
# # # ## ## # # #
###################
#######
######
#####
####
# M#
####
###############
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMME#
###############