Ваш друг рассказал вам, как добраться до лучшего ресторана в городе. Это серия левого и правого поворотов. К сожалению, они забыли упомянуть, как долго нужно идти прямо между этими поворотами. К счастью, у вас есть карта улиц со всеми ресторанами. Может быть, вы можете выяснить, какой ресторан они имели в виду?
вход
Карта представлена в виде прямоугольной сетки символов ASCII. .
это дорога, #
это здание, A
в котором Z
находятся различные рестораны. Вы начинаете в верхнем левом углу, идете на восток. Пример:
.....A
.#.###
B....C
##.#.#
D....E
##F###
Инструкции вашего друга будут представлены в виде (потенциально пустой) строки или списка символов, содержащих L
s и R
s.
Выход
Вы можете пройти любой путь, который соответствует левому и правому поворотам во входной строке, при условии, что вы делаете по крайней мере один шаг вперед перед каждым из них, а также в конце. В частности, это означает, что если строка начинается с, R
вы не можете сразу перейти на юг в крайнем левом столбце. Это также означает, что вы не можете развернуться на 180 ° на месте.
Вы не можете пройтись по зданиям или ресторанам, кроме того, которое вы достигли в конце. Вы можете предположить, что верхний левый угол является .
.
Вы должны вывести все рестораны, к которым можно добраться по инструкциям вашего друга, в виде строки или списка.
Вы можете предположить, что инструкции приведут хотя бы к одному ресторану. Например, один L
будет недействительным для вышеуказанной карты.
Некоторые примеры для приведенной выше карты:
<empty> A
R F
RR B,D
RL C,E
RLRL E
RLLR C
RLLL B
RLRR D
RLRRRR A,C
RLLLRLL B
Обратите внимание, в частности, что R
не достигает B
.
Вы можете написать программу или функцию, принимая ввод через STDIN (или ближайшую альтернативу), аргумент командной строки или аргумент функции и выводя результат через STDOUT (или ближайшую альтернативу), возвращаемое значение функции или параметр функции (out).
Применяются стандартные правила игры в гольф .
Дополнительные тестовые случаи
Вот карта большего размера, любезно предоставленная Конором О'Брайеном (который я немного изменил):
.......Y..........................######
.####.....#.##....##..######....#.###.##
B.........#.##.#..##....##...##.#.#P...#
.#.#####..#.##..#.##....##.#....#.####.#
.#.#...C..#.##...G##..#.##.#....#.#....#
.#.#.#.#..#.####.###.#..##.#....#.#.NO.#
.#.#A#.#..#.##...F###...##.#.##.#......#
.#.###....#.##....##....##.#....###....#
.#.....##...##....##...D##........###R.#
.#.##..##...##E...##..######....####...#
.....X....#.#.....................##S.T#
###########.###########M############...#
#................................###.#.#
#.#########.########.######.#.######.#.#
#......V#.....######.IJ...........##.#.#
#########.###......ZH############L##.#.#
#########.##########.###############.#.#
####K##...##########.#....#..........#.#
####....########U......##...#######Q.#.#
#####################################W.#
А вот несколько избранных списков направлений и их ожидаемых результатов:
<empty> Y
RR B
RLL Y
RLRR B,C,X
RLLLRRR G
RLRLRLRL I,Z
RLLRRRLRRLRR C,D,F,G,Y
RLRRLLRLLLRL B,C,Y
RLLRRLRRRLLLL F,M,N,O,Y
RLRRLLLRRRRLLLL F,M,Y
RLRRLRRRRRRRRRR E,F,Y
RLRRRLLLRLLRRLL M,N,O
RLLRRLRRLRLRLRRLLR E,U
RLRLLRLRRLRRRRRLRL F,G,I,Z
RLLRRLLRLLRRRLRRLLRR W
RLLLRRRLRRLLLLLRLLLLLL D,G,X
RLRLLRLRRLRLRRRLRLLLRR B,C,E,J,X
RLRLRLLLLRLRRRRRRLRLRRLR Y
RLRLRRRLRLLLLRLRRLLLLRLLRRL E,M,X
RLRLLLRRRLLLRLLRLLRLRRLRLRR B,E,F,K
RLRRRLLLLLLLLLLLLLLLRRRRLLL A,B
Бонусный вопрос: есть вход, который приводит только I
или только U
? Если да, то какой самый короткий путь?
источник
Python 2,
180177168163161158 байтПараметр
v
- это карта в виде строки;o
этоLR
строкаМитч Шварц сохранил
2310лотов байтов. Благодарность!Я сохранил два байта установкой
O={0}
и возвратом`O`[9::5]
, что может быть не очень переносимым:hash(0) == 0
я полагаю, что это предполагает , что порядок элементовrepr(O)
должен бытьи творчески разрезая эту строку, я получаю ответ.
источник
C ++ 465
C ++ такой многословный ...
Я постараюсь сократить его дальше. Предложения приветствуются.
источник