Каждый программист знает, что прямоугольники □
действительно забавны. Чтобы усугубить это удовольствие, эти милые и нечеткие диаграммы могут быть преобразованы в группы переплетенных скобок.
Этот вызов обратен моему предыдущему .
Допустим, у вас есть группа взаимосвязанных прямоугольников, например:
+------------+
| |
+--+-+ +----+-+
| | | | | |
| | | +---+--+ | |
| | | | | | | |
+--+-+ | +-+--+-+-+-+
| | | | | | | |
| | | | | | | |
| | | | | | | | +-+
| +-+-+--+ | | | | |
| | | | | | +-+-+-+
+-----+-+----+ | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Дополнительные замечания:
- Нет двух
+
с никогда не будет смежным - Никакие два прямоугольника никогда не разделят ребро или угол
- В каждом столбце будет только самое большее одно вертикальное ребро
Первый шаг - посмотреть на крайний левый край любого прямоугольника. Назначьте один из четырех типов скобок ({[<
. Я выбираю [
.
+------------+
| |
[--+-] +----+-+
[ | ] | | |
[ | ] +---+--+ | |
[ | ] | | | | |
[--+-] | +-+--+-+-+-+
| | | | | | | |
| | | | | | | |
| | | | | | | | +-+
| +-+-+--+ | | | | |
| | | | | | +-+-+-+
+-----+-+----+ | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Теперь посмотрите на второй левый прямоугольник. Поскольку он перекрывает [
прямоугольник, он должен быть другого типа. Я выбираю (
.
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] +---+--+ ) |
[ ( ] | | | ) |
[--(-] | +-+--+-)-+-+
( | | | | ) | |
( | | | | ) | |
( | | | | ) | | +-+
( +-+-+--+ ) | | | |
( | | ) | | +-+-+-+
(-----+-+----) | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Следующий крайний левый прямоугольник не пересекается ни с одним предыдущим прямоугольником, но вкладывается в предыдущий. Я решил назначить это (
снова. Обычно целесообразно назначить прямоугольник того же типа, что и вложенный в него, если это возможно, но иногда требуется возврат.
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] (---+--) ) |
[ ( ] ( | ) ) |
[--(-] ( +-+--)-)-+-+
( ( | | ) ) | |
( ( | | ) ) | |
( ( | | ) ) | | +-+
( (-+-+--) ) | | | |
( | | ) | | +-+-+-+
(-----+-+----) | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Этот следующий прямоугольник может быть назначен [
снова.
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] (---+--) ) |
[ ( ] ( | ) ) |
[--(-] ( [-+--)-)-+-]
( ( [ | ) ) | ]
( ( [ | ) ) | ]
( ( [ | ) ) | ] +-+
( (-[-+--) ) | ] | |
( [ | ) | ] +-+-+-+
(-----[-+----) | ] | | | |
[ | | ] | +-+ |
[ +------+ ] | |
[ ] | |
[----------] +-----+
Этот следующий прямоугольник довольно забавный. Он пересекает и a, (
и [
прямоугольник, поэтому я мог бы назвать его {
прямоугольником (или <
никому не нравящемуся).
(------------)
( )
[--(-] {----)-}
[ ( ] { ) }
[ ( ] (---{--) ) }
[ ( ] ( { ) ) }
[--(-] ( [-{--)-)-}-]
( ( [ { ) ) } ]
( ( [ { ) ) } ]
( ( [ { ) ) } ] +-+
( (-[-{--) ) } ] | |
( [ { ) } ] +-+-+-+
(-----[-{----) } ] | | | |
[ { } ] | +-+ |
[ {------} ] | |
[ ] | |
[----------] +-----+
Последние два прямоугольника не так уж и плохи. Они могут быть двух разных типов.
(------------)
( )
[--(-] {----)-}
[ ( ] { ) }
[ ( ] (---{--) ) }
[ ( ] ( { ) ) }
[--(-] ( [-{--)-)-}-]
( ( [ { ) ) } ]
( ( [ { ) ) } ]
( ( [ { ) ) } ] {-}
( (-[-{--) ) } ] { }
( [ { ) } ] <-{-}->
(-----[-{----) } ] < { } >
[ { } ] < {-} >
[ {------} ] < >
[ ] < >
[----------] <----->
Считывая прямоугольники, я получаю [(]([{))}]<{}>
. Это будет один из возможных выходных данных для вышеуказанного ввода. Вот список многих возможных вариантов, не исчерпывающий:
[(]([{))}]<{}>
<(>(<{))}>{()}
{<}[{(]>)}[<>]
any of the 4! permutations of ([{<, you get the idea...
вход
Прямоугольники ASCII-art, исходя из предположения, что они однозначны (см. Примечания выше) и могут быть надлежащим образом преобразованы в строку скобок. Вы можете предполагать, что либо нет завершающих пробелов, либо добавлен прямоугольник с необязательным завершающим символом новой строки. Там не будет ведущих пробелов.
Выход
Любая из допустимых строк скобок, которая подчиняется ограничениям пересечения прямоугольников. Кроме необязательного завершающего символа новой строки, в скобках не должно быть других символов. Основное правило: если два квадрата пересекаются, то им должны быть назначены разные типы скобок.
Цель
Это код-гольф, (недостаток) количество за качество.
+
для своего верхнего левого угла, а затем (сразу под) +
для своего нижнего левого угла?