Вступ
Всім відомо, що можливість успішного навігації астероїдного поля становить приблизно від 3 720 до 1. Але, незважаючи на ваше попередження, Хан Соло все ще готовий спробувати свою удачу.
Боячись свого штучного життя, ви вирішили за допомогою коду на своєрідному діалекті корабля ( читайте: улюблена мова Code Golf ) - програму уникнення астероїдів, яка вирішить, який шлях пройти в лабіринті астероїдного поля ASCII.
Вхідні дані
Millenium Falcon має програму картографування астероїдних полів, яка дає такі дані, як:
| ##### ######### |
| ###### # ### # |
| # # # # #### # |
@ ## ####
|# # # ### ## |
|## ## #### # # |
|#### ##### # ## |
Верхні рядки ліворуч від Сокола, нижні рядки - праворуч від Сокола, а стовпці - це те, що знаходиться перед судном.
- Кожен
#
- перешкода. - Кожен простір - це порожній простір, в який може летіти корабель.
- Вхід завжди має 7 символів. Це обмеження ширини зіставлення астероїдів.
- Вхід завжди має 32 символи (30 для самого поля та 2 для початку та кінця). Це межа глибини відображення астероїдів. Вертикальні смуги
|
позначають початок і кінець відображення. @
- Сокіл. Це завжди в середньому рядку (4-й ряд) та першому стовпчику на вході.- Місце, яке залишилося у вертикальних смугах на останньому стовпчику, є місцем, до якого повинен прибути корабель. Він завжди знаходиться в середньому рядку (4-й ряд) і в останньому стовпчику на вході.
Вхід може сприйматися як багаторядковий рядок, масив рядків із STDIN або параметрів функції, або читати з файлу.
Можливі маневри
Вас переслідують бійці TIE, тому ви завжди повинні йти вперед. Таким чином, існує три способи, коли корабель може літати на кожному кроці:
-
Вперед/
Вперед і поверніть ліворуч\
Вперед і поверніть праворуч
Наприклад, це дійсні шляхи:
@---
--
/ \ /
@ -
-
/ \
/ \
@ \
Як бачите, завжди є рівно один хід у колонці. Сокіл - це шматок сміття, тому він не може робити жорстоких поворотів. Які засоби рухається , наприклад, /\
або \/
будуть заборонені . -
Між двома протилежними поворотами має бути якнайменше один чистий вперед . З іншого боку, можливий поворот в один бік для декількох кроків поспіль, як видно вище.
Сокіл зазнає аварії, якщо одним рухом корабель перебуває на місці, де перешкода. Наприклад, ці кроки призводять до збоїв:
@-#
@
\
#
#
/
@
Зауважте, що це не збій:
@-#
\
-
Вихідні дані
Ви повинні вивести те саме поле астероїда ASCII, з дійсним шляхом до кінця. Сокіл повинен бути надрукований на кінцевому місці замість стартового місця.
Наприклад, допустимим висновком для вхідного прикладу, наведеного раніше, буде:
| ##### ######### |
| ###### #-------- ### # |
| # # #/ # ####\ # |
--------- ## \ #### ----@
|# # # ### \ ## / |
|## ## #### \ #/ # |
|#### ##### #-- ## |
Ваш шлях потребує лише того, щоб не розбити сокола. Це не потрібно бути найкоротшим можливим шляхом.
Можна припустити, що завжди знайдеться хоча б один можливий шлях до кінця.
Ви можете вивести STDOUT у файл або будь-який еквівалент до тих пір, поки поле астероїду буде надруковано точно так, як вони є у цій публікації (наприклад, виведення списку координат шляху недійсне).
Тестові справи
Нормальне астероїдне поле
| ##### ######### | | ###### # ### # | | # # # # #### # | @ ## #### |# # # ### ## | |## ## #### # # | |#### ##### # ## |
Можливий вихід
| ##### ######### | | ###### #-------- ### # | | # # #/ # ####\ # | --------- ## \ #### ----@ |# # # ### \ ## / | |## ## #### \ #/ # | |#### ##### #-- ## |
Гіперрегулярне астероїдне поле
|# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # | @ # # # # # # # # # # # # # # |# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # |
Можливий вихід
|# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # | -# #-# #-# #-# #-# #-# #-# #--@ |#\#/#\#/#\#/#\#/#\#/#\#/#\#/# | | #-# #-# #-# #-# #-# #-# #-# #| |# # # # # # # # # # # # # # # |
Ядро зірки смерті
| # # # # | | # # # | | # # # # # | @ # # # # # | # # # # | | # # # # # | | # # # # |
Можливий вихід
| # # # -- # | | --- # # / #\ - | | / #\ # # / # \ /#\ | - # \ # #/ # - # ----@ | # \ # ---- # # | | # \#/ # # # | | # - # # # |
Тренч зірки смерті
|##############################| |##############################| |##############################| @ |##############################| |##############################| |##############################|
Вихідні дані
|##############################| |##############################| |##############################| ------------------------------@ |##############################| |##############################| |##############################|
Астероїдна печера
|### ##########################| |## # ############### ## ######| |# ### ######## ### ## # #####| @ ###### ###### ### ## ### |######## ### ### ## #########| |########## # ### ## ##########| |########### #####|
Можливий вихід
|###-##########################| |##/#\############### ##-######| |#/###--######## ### ##/#\#####| -######\###### ### ##/###-----@ |########--### ### ##/#########| |##########\# ### ##/##########| |###########-------- #####|
Оцінка балів
R2D2 зайнятий плаванням у болотах, тому вам доведеться самостійно запрограмувати контролер Falcon, що стомлює. Тому виграє найкоротший код .
-
шлях на кожному повороті, який визначається як рух "вперед". Але фактичні рухи - це завжди дві діагоналі-вліво, а за ними дві діагоналі-права.