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