Ти миша. Ваші друзі миші були захоплені, вони непритомніли і потрапили в лабіринт, який має лише один вхід / вихід. У вас, мабуть, є ідеальна карта лабіринту, тож ви можете скласти рішення, щоб кинутися і перенести їх на безпеку. Однак лабіринт охороняється системою безпеки, яка спровокує сповіщення, якщо 1000
буде досягнуто поріг , що призведе до того, що ви потрапите в полон і не зможете виконати свою рятувальну місію.
З попередніх досліджень лабіринту кожен квадрат, на який ви крокуєте (тобто кожен горизонтальний або вертикальний рух - миші не можуть рухатися по діагоналі ), додає 1
до лічильника системи безпеки. Однак, якщо ви переносите вагу (або блок динаміту, або непритомний друг миші), він замість цього додає, 2
оскільки виявляє додатковий тиск. На площі входу / виходу немає цієї системи безпеки, і тому вона не додається до лічильника.
У вас є необмежений запас динаміту, який ви принесли до входу, тому ви можете просто підірвати всі стіни, щоб звільнити своїх друзів. Але з цим потрібно бути обережними, оскільки кожен вибух збільшує 50
лічильник від струсу струсу. Крім того, ви можете переносити по одній речі одночасно - одну мишу або один блок динаміту. Оскільки кожен блок динаміту може підірвати лише один простір для стін, це означає, що якщо є кілька стін поспіль, вам потрібно здійснити поїздку з порожніми руками назад до входу, щоб захопити більше.
Приклад, пророблений
Припустимо, наш лабіринт виглядає наступним чином:
######
#M# E#
######
Я буду використовувати c
для лічильника. Ми починаємо в E
N-Trance, перемістити один квадрат вліво, несучи динаміт, c=2
. Ми вибухали динаміт , щоб підірвати стіну, c=52
. Ми рухаємо два квадрати вліво, з порожніми руками, щоб дістати c=54
, і ми тепер стоїмо на площі миші. Ми підбираємо нашого друга і переміщуємо 3 квадрата назад до E
xit, але останній квадрат не рахується, оскільки у нього немає ніяких датчиків, тож це всього 2 квадрата з чимось на спині. Це означає, що коли ми доходимо до виходу з кінцевою мишкою c=58
, що менше 1000
, і тому місія вдається.
Виклик
Враховуючи лабіринт введення, виведіть, чи ви, герой миші, зможете успішно врятувати всіх захоплених мишей у межах обмежень, викладених вище, чи є місія невдалою.
Вхідні дані
- 2D-лабіринт у будь-якому прийнятному форматі (багаторядковий рядок, масив рядків тощо).
- Для цього завдання я буду використовувати
#
як внутрішні, так і зовнішні стіни,M
для друзів миші таE
для входу. - Вхід ніколи не буде примикати безпосередньо до внутрішньої стіни (завжди знайдеться хоча б один простір, в якому можна вільно пересуватися).
- Ви можете підміняти будь-які друковані символи ASCII, якщо ви хочете, щоб це було послідовно. Це дійсно дозволяє використовувати два різні символ для внутрішніх стін проти зовнішніх стін, так довго , як ви підтримувати узгодженість (наприклад, якщо ви вирішили використовувати
@
для внутрішніх стін замість і залишити#
на зовнішній вигляд, кожна внутрішня стінка повинна бути@
і кожна зовнішня стіна#
). - Лабіринт завжди буде повністю обмежений стінами, але не обов’язково прямокутний. За бажанням ви можете припустити, що лабіринт прокладений пробілами, щоб зробити прямокутний введення (необов’язково).
- У лабіринті можуть бути ділянки, недоступні без динаміту.
- Ви не можете динамізувати зовнішні стіни лабіринту.
Вихід
Truthy / falsey значення. Truthy для "Так, миша може врятувати будь-яку іншу мишку" або 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#
###############