Кожен програміст знає, що прямокутники - □
це дійсно весело. Щоб посилити цю забаву, ці милі та нечіткі діаграми можна перетворити на групи переплетених дужок.
Цей виклик є зворотним моїм попереднім .
Скажімо, у вас є така група замикаючих прямокутників так:
+------------+
| |
+--+-+ +----+-+
| | | | | |
| | | +---+--+ | |
| | | | | | | |
+--+-+ | +-+--+-+-+-+
| | | | | | | |
| | | | | | | |
| | | | | | | | +-+
| +-+-+--+ | | | | |
| | | | | | +-+-+-+
+-----+-+----+ | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Додаткові нотатки:
- Жоден два
+
s ніколи не буде суміжним - Жоден два прямокутники ніколи не поділить край чи кут
- У кожному стовпчику завжди буде щонайменше один вертикальний край
Перший крок - подивитися лівий край лівого прямокутника. Призначте його одному з чотирьох типів дужок ({[<
. Я вибираю [
.
+------------+
| |
[--+-] +----+-+
[ | ] | | |
[ | ] +---+--+ | |
[ | ] | | | | |
[--+-] | +-+--+-+-+-+
| | | | | | | |
| | | | | | | |
| | | | | | | | +-+
| +-+-+--+ | | | | |
| | | | | | +-+-+-+
+-----+-+----+ | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Тепер подивіться на другий лівий прямокутник. Оскільки він перекриває [
прямокутник, він повинен бути іншого типу. Я вибираю (
.
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] +---+--+ ) |
[ ( ] | | | ) |
[--(-] | +-+--+-)-+-+
( | | | | ) | |
( | | | | ) | |
( | | | | ) | | +-+
( +-+-+--+ ) | | | |
( | | ) | | +-+-+-+
(-----+-+----) | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Наступний лівий прямокутник не перетинається з жодним попереднім прямокутником, але гніздиться в межах попереднього. Я вирішую призначити його (
ще раз. Як правило, добре припустити, щоб присвоїти прямокутнику такого ж типу, як і те, що він вкладається всередині, якщо можливо, але іноді потрібно зворотний трек.
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] (---+--) ) |
[ ( ] ( | ) ) |
[--(-] ( +-+--)-)-+-+
( ( | | ) ) | |
( ( | | ) ) | |
( ( | | ) ) | | +-+
( (-+-+--) ) | | | |
( | | ) | | +-+-+-+
(-----+-+----) | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Цей наступний прямокутник можна призначити [
заново.
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] (---+--) ) |
[ ( ] ( | ) ) |
[--(-] ( [-+--)-)-+-]
( ( [ | ) ) | ]
( ( [ | ) ) | ]
( ( [ | ) ) | ] +-+
( (-[-+--) ) | ] | |
( [ | ) | ] +-+-+-+
(-----[-+----) | ] | | | |
[ | | ] | +-+ |
[ +------+ ] | |
[ ] | |
[----------] +-----+
Цей наступний прямокутник - це щось цікаве. Він перетинає і a, (
і [
прямокутник, тому я міг би назвати його {
прямокутником (або, <
але, ніхто їх не любить).
(------------)
( )
[--(-] {----)-}
[ ( ] { ) }
[ ( ] (---{--) ) }
[ ( ] ( { ) ) }
[--(-] ( [-{--)-)-}-]
( ( [ { ) ) } ]
( ( [ { ) ) } ]
( ( [ { ) ) } ] +-+
( (-[-{--) ) } ] | |
( [ { ) } ] +-+-+-+
(-----[-{----) } ] | | | |
[ { } ] | +-+ |
[ {------} ] | |
[ ] | |
[----------] +-----+
Останні два прямокутники не такі вже й погані. Вони можуть бути будь-яких двох різних типів.
(------------)
( )
[--(-] {----)-}
[ ( ] { ) }
[ ( ] (---{--) ) }
[ ( ] ( { ) ) }
[--(-] ( [-{--)-)-}-]
( ( [ { ) ) } ]
( ( [ { ) ) } ]
( ( [ { ) ) } ] {-}
( (-[-{--) ) } ] { }
( [ { ) } ] <-{-}->
(-----[-{----) } ] < { } >
[ { } ] < {-} >
[ {------} ] < >
[ ] < >
[----------] <----->
Відчитуючи прямокутники, я отримую [(]([{))}]<{}>
. Це був би один можливий вихід для вищевказаного вводу. Ось перелік багатьох можливих варіантів, не вичерпних:
[(]([{))}]<{}>
<(>(<{))}>{()}
{<}[{(]>)}[<>]
any of the 4! permutations of ([{<, you get the idea...
Вхідні дані
ASCII-арт-прямокутники з припущенням, що вони однозначні (див. Примітки вище) і можуть бути належним чином перетворені в рядок дужок. Ви можете припустити, що немає пробілів або прокладений прямокутником, з додатковим новим рядком. Провідних пробілів не буде.
Вихідні дані
Будь-яка з дійсних дужок, що дотримуються обмежень перетину прямокутників. Окрім необов’язкового останнього нового рядка, не повинно бути ніяких інших символів, крім дужок. Головне правило, якщо два квадрати перетинаються, то їм слід призначити різні типи дужок.
Мета
Це код-гольф, (відсутність) кількості над якістю.
+
лівого верхнього кута, а потім (безпосередньо внизу) +
для нижнього лівого кута?