Учитывая список путей, выведите правильный путь.
Пример пути:
/\
----+/
|
-
и|
горизонтальные и вертикальные пути./
и\
повороты на 90 °.+
рассматривается как-
или в|
зависимости от текущего направления.
Пути могут идти в любом направлении, и символ может использоваться в нескольких путях.
Ввод будет таким:
/--\
A------+--+--#
B------/ \--:
C------------#
D------------#
A
,B
,C
ИD
являются начинает путь#
это стена (путь плохой):
это конец (путь правильный)
Так что здесь вывод будет B
.
Вы можете предположить:
:
и#
всегда будет достигнут слева.- Символ справа от начала пути всегда будет
-
. - Пути всегда будут хорошо сформированы.
#
и:
всегда будет в одном столбце.- Всегда будет только один
:
и 4 пути.
Контрольные примеры
A------#
B------#
C------#
D------:
=>
D
A-\ /---:
B-+-/ /-#
C-+---+-#
D-+---/
\-----#
=>
B
/-\
A-+\\---#
B-/\-\/-#
C----++-#
D----+/
\--:
=>
A
A-\
B-+\
C-++\/----#
D-+++//---:
\++-//--#
\+--//-#
\---/
=>
A
/-\
A-+-/-\
B-+-+-\--#
C-+-/ |/-#
D-\---++-#
\---+/
\--:
=>
B
Поскольку это код-гольф , самый короткий ответ победит.
code-golf
ascii-art
path-finding
TuxCrafting
источник
источник
/
и том же\
?:
всегда быть достигнуто с левой стороны, или оно может быть достигнуто с верхней или нижней части , а? Другими словами, могут ли быть символы, отличные от#
или:
в последнем столбце?Ответы:
Слип , 47 байт
Проверьте это здесь.
Yay для недокументированных функций ...
объяснение
Slip - это, по сути, двумерный синтаксис регулярных выражений, и по умолчанию программы Slip распечатывают подмножество входных данных, которым они соответствуют. В этом случае я просто сопоставляю правильный путь. Чтобы предотвратить печать всего пути, я использую недокументированные
(?,...)
группы, которые просто указывают, что символы, совпадающие внутри, должны быть исключены из вывода.Что касается регулярных выражений, к сожалению, есть некоторое дублирование , потому что
\
и/
нужно относиться по- разному в зависимости от того ли мы двигаться по горизонтали или по вертикали. С другой стороны, так как мы знаем, что путь начинается и заканчивается горизонтально, мы знаем, что существует четное число\
или/
в каждом пути, так что мы можем сопоставить два из них одновременно.источник
:)
Python, 221 байт
Первый абзац - это только один пробел, а в цикле while - табуляция.
источник
Javascript (ES6),
117104 байтаТестовые случаи:
источник
Рубин, 140 байт
Попробуйте это на repl.it: https://repl.it/CyJv
Ungolfed
источник
Perl 211 байт
Ungolfed:
Это мой первый Perl Golf, поэтому предложения приветствуются :)
источник