Введение
Всем известно, что вероятность успешного перемещения по полю астероидов составляет примерно 3720 к 1. Но, несмотря на ваше предупреждение, Хан Соло все еще хочет попытать счастья.
Опасаясь за свою искусственную жизнь, вы решаете закодировать на своеобразном диалекте корабля ( читай: предпочитаемый вами язык Code Golf ) программу избегания астероидов, которая решит, какой путь выбрать в лабиринте ASCII поля астероидов.
вход
Millenium Falcon имеет программу картирования астероидного поля, которая дает данные, подобные этим:
| ##### ######### |
| ###### # ### # |
| # # # # #### # |
@ ## ####
|# # # ### ## |
|## ## #### # # |
|#### ##### # ## |
Верхние ряды слева от Сокола, нижние ряды справа от Сокола, а столбцы представляют то, что находится перед кораблем.
- Каждый
#
является препятствием. - Каждое пространство - это пустое пространство, в котором корабль может летать.
- Ввод всегда 7 символов в высоту. Это предел ширины карт астероидов.
- Длина ввода всегда 32 символа (30 для самого поля и 2 для начального и конечного пределов). Это предел глубины отображения астероидов. Вертикальные полосы
|
отмечают начало и конец отображения. @
это сокол Он всегда находится в среднем ряду (4-й ряд) и в первом столбце ввода.- Пространство, оставленное в вертикальных полосах в последнем столбце, является местом, куда должен прибыть корабль. Он всегда находится в среднем ряду (4-й ряд) и последнем столбце ввода.
Входные данные могут быть приняты в виде многострочной строки, массива строк, из STDIN или параметров функции, или считаны из файла.
Возможные маневры
Вас преследуют TIE-Fighters, поэтому вы всегда должны идти вперед. Таким образом, существует три способа, которыми корабль может летать на каждом этапе:
-
Вперед/
Вперед и поверните налево\
Вперед и поверните направо
Например, это допустимые пути:
@---
--
/ \ /
@ -
-
/ \
/ \
@ \
Как видите, в каждом столбце всегда ровно один ход. Сокол - кусок хлама, поэтому он не может совершать насильственные повороты. Это означает, что ходы, такие как /\
или \/
не разрешены . -
Между двумя противоположными поворотами должен быть хотя бы один чистый вперед . С другой стороны, поворот в одну сторону для нескольких шагов подряд возможен, как показано выше.
Сокол падает, если одно движение приводит корабль к тому месту, где находится препятствие. Например, эти шаги приводят к сбоям:
@-#
@
\
#
#
/
@
Обратите внимание, что это не сбой:
@-#
\
-
Выход
Вы должны вывести то же поле астероидов ASCII, с правильным путем до конца. Сокол должен быть напечатан в конечной точке вместо начальной точки.
Например, допустимый вывод для приведенного ранее примера ввода будет:
| ##### ######### |
| ###### #-------- ### # |
| # # #/ # ####\ # |
--------- ## \ #### ----@
|# # # ### \ ## / |
|## ## #### \ #/ # |
|#### ##### #-- ## |
Ваш путь должен только не сокрушить сокола. Это не должен быть кратчайший путь.
Можно предположить, что всегда будет хотя бы один возможный путь до конца.
Вы можете вывести в STDOUT, в файл или любой другой эквивалент, если поле астероида напечатано точно так же, как в этом посте (например, вывод списка координат для пути недопустим).
Контрольные примеры
Нормальное астероидное поле
| ##### ######### | | ###### # ### # | | # # # # #### # | @ ## #### |# # # ### ## | |## ## #### # # | |#### ##### # ## |
Возможный вывод
| ##### ######### | | ###### #-------- ### # | | # # #/ # ####\ # | --------- ## \ #### ----@ |# # # ### \ ## / | |## ## #### \ #/ # | |#### ##### #-- ## |
Гиперрегулярное астероидное поле
|# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # | @ # # # # # # # # # # # # # # |# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # |
Возможный вывод
|# # # # # # # # # # # # # # # | | # # # # # # # # # # # # # # #| |# # # # # # # # # # # # # # # | -# #-# #-# #-# #-# #-# #-# #--@ |#\#/#\#/#\#/#\#/#\#/#\#/#\#/# | | #-# #-# #-# #-# #-# #-# #-# #| |# # # # # # # # # # # # # # # |
Ядро звезды смерти
| # # # # | | # # # | | # # # # # | @ # # # # # | # # # # | | # # # # # | | # # # # |
Возможный вывод
| # # # -- # | | --- # # / #\ - | | / #\ # # / # \ /#\ | - # \ # #/ # - # ----@ | # \ # ---- # # | | # \#/ # # # | | # - # # # |
Траншея Звезды Смерти
|##############################| |##############################| |##############################| @ |##############################| |##############################| |##############################|
Выход
|##############################| |##############################| |##############################| ------------------------------@ |##############################| |##############################| |##############################|
Астероидная пещера
|### ##########################| |## # ############### ## ######| |# ### ######## ### ## # #####| @ ###### ###### ### ## ### |######## ### ### ## #########| |########## # ### ## ##########| |########### #####|
Возможный вывод
|###-##########################| |##/#\############### ##-######| |#/###--######## ### ##/#\#####| -######\###### ### ##/###-----@ |########--### ### ##/#########| |##########\# ### ##/##########| |###########-------- #####|
счет
R2D2 занят плаванием в болотах, поэтому вам придется самостоятельно программировать контроллер Falcon, что утомительно. Поэтому самый короткий код выигрывает .
-
на пути на каждом повороте, который определяется как «движение вперед». Но фактические ходы - всегда два диагонали налево, сопровождаемые двумя диагональю направо.