Вы несете ответственность за строительство новой автострады. Однако он ведет через гористые земли и поэтому нуждается в многочисленных мостах и туннелях. Само шоссе должно оставаться на одном уровне.
вход
Вам дается грубое ASCII-описание того, как горы выглядят при стандартном вводе, например:
/\
/ \
/\ / \
/\ / \/ \
/ \ / \ /\
/ \/ \ / \
_ / \ /\ / \
\ / \ / \ / \ /\
\ / \ / \/ \/ \
\ / \ /
\/ \/
В _
первом столбце отмечены начало и уровень дороги. Горный массив является смежным, и если последний сегмент будет мостом, он будет иметь четное количество символов.
Вы можете предположить, что строка ввода никогда не длиннее 100 символов и что в ней не более 15 строк. Каждая строка имеет одинаковую длину, которая может быть дополнена пробелом в конце. Дорога никогда не начинается внутри горы или моста. Первое, что следует за дорожной плиткой на входе, это либо наклон вниз, либо вверх.
Выход
Выходом является тот же горный массив, за исключением того, что сейчас есть дорога, где раньше было только его начало. Вывод дан на стандартный вывод.
Для этого существует множество правил:
Дорога должна начинаться с места, указанного на входе, и оставаться на одном уровне. Чтобы было проще, мы подготовили несколько готовых дорожных плиток, которые выглядят так
_
:_______ \ / \/\/
Дорога должна простираться до дальнего конца горного хребта (т. Е. Длина входных линий определяет, насколько далеко дорога идет).
Туннели должны быть пробурены всякий раз, когда гора должна идти туда, куда должна идти дорога. Туннели проходят прямо через гору и оставляют дыры в начале и конце (т. Е. Туннель заменяет склон горы закрывающей скобкой в начале и открывающей скобкой в конце).
Туннели выходят из туннеля в гору, у которого обычно есть потолок. К счастью, наши готовые дорожные плитки можно использовать для усиления потолка, чтобы туннель не разрушался (линия над туннелем должна использоваться
_
для усиления туннеля):/\ / \ /____\ ___)______(__ \/ \/
Туннель не нуждается в укреплении, когда гора недостаточно высоко над ней. Для меня это тоже звучит странно, но мне сказали, что готовые дорожные плитки достаточно прочные, чтобы их можно было удерживать даже в таком случае, если они находятся на некотором расстоянии (потолок туннеля не рисуется, если прямо над туннелем имеется уклон):
/\ /\/__\ ___)______(__ \/ \/
Мосты нужны всякий раз, когда дорога должна пересечь пропасть. Для коротких мостов предварительно изготовленные дорожные плитки достаточно прочные, но все же нуждаются в небольшой поддержке в начале и в конце моста (первый нисходящий уклон под мостом и последний восходящий уклон заменены на
Y
так, чтобы была опорная балка для моста ):_____ Y Y \/
Более длинные мосты нуждаются в дополнительной поддержке. Длинный мост - это тот, который имеет более шести неподдерживаемых дорожных плиток подряд. Длинные мосты нуждаются в столбе в их центре. Столпы легко встраивается с нашими скомпилированным столпом балками , которые выглядят следующим образом :
|
. Каждому столбу нужны два из них, и они простираются до основания пропасти:_____________________________ Y || Y \ /\ || /\ /\/ \ /\ / \||/ \ /\/ \/ \/ \/ \/
Поскольку входные данные представляют только часть всей горной цепи, через которую необходимо проложить автостраду, она может внезапно закончиться в середине моста или туннеля. Правило длинного моста все еще применяется к последнему сегменту, и вы можете предположить, что первая часть за заданным входом снова поддерживает мост.
Следуя приведенным выше правилам, мы получаем следующее для нашего ввода:
/\
/ \
/\ / \
/\ / \/ \
/ \ / \ /\
/____\/______________\ /__\
_________)______________________(________)(____)____(______
Y Y Y Y Y Y Y YY
\ / \ / \/ \/ \
\ / \ /
\/ \/
Самый короткий код по количеству символов выигрывает. Конечные пробелы в строках игнорируются для проверки.
Пример ввода 1
_
\ /\
\ / \
\ / \
\ /\ / \ /\ /
\ /\ / \ / \ /\ /\/ \ /
\ / \ / \/ \ / \/ \/\ /
\/ \ / \ / \/
\ / \/
\/
Пример вывода 1
____________________________________________________________
Y || YY ||
\ || / \ ||
\ || / \ ||
\ || /\ / \ || /\ /
\ /\ || / \ / \ /\ |/\/ \ /
\ / \ || / \/ \ / \/ \/\ /
\/ \ || / \ / \/
\||/ \/
\/
Пример ввода 2
/\ /\
/ \/ \ /
/\ / \ /\ /
/\ / \ / \/ \ /
/ \ / \/\ / \ /\ /
/ \/ \ / \ / \ /
_/ \ / \/ \/
\ /
\ /\/
\ /\ /
\/ \ /
\ /
\/
Пример вывода 2
/\ /\
/ \/ \ /
/\ / \ /\ /
/\ / \ / \/ \ /
/ \ / \/\ / \ /\ /
/____\/________\ /__________________\ /__\ /____
_)________________(__________________)____________________()____()_____
Y || Y
\ || /\/
\ /\ || /
\/ \|| /
\| /
\/
Заметка
Конечные пробелы в выводе игнорируются для сравнения с эталонными решениями.
Выигрышное условие
Самый короткий код выигрывает, как это принято в гольфе. В случае ничьей победит более раннее решение.
Контрольные примеры
Существует два сценария тестирования, содержащие идентичные тестовые случаи:
Вызов в обоих случаях: <test script> <my program> [arguments]
например, ./test ruby bridges.rb
или ./test.ps1 ./bridges.exe
.
Еще одна заметка
Эта задача была частью соревнования по гольфу, проводимого в моем университете в течение 2011-W24. Баллы и языки наших конкурсантов были следующими:
- 304 - Perl
- 343 - С
- 375 - С
- 648 - Питон
Наше собственное решение (благодаря Ventero) было
- 262 - Рубин