Кожен програміст знає, що брекети - []{}()<>
це дійсно весело. Щоб посилити цю забаву, групи переплетених дужок можна перетворити на милі та нечіткі діаграми.
Скажімо, у вас є рядок, який містить врівноважені дужки, наприклад [{][<(]})>(())
. Перший крок - повернути струну на 45 градусів за годинниковою стрілкою. (У Mathematica це можна майже зробити Rotate[ur_string,-pi/4]
). Ось результат першого кроку:
[
{
]
[
<
(
]
}
)
>
(
(
)
)
Далі додайте діагональний пробіл між кожним символом.
[
{
]
[
<
(
]
}
)
>
(
(
)
)
Далі почніть з самої лівої дужки і намалюйте квадрат між нею та її партнером у злочині.
+---+
| |
| { |
| |
+---+
[
<
(
]
}
)
>
(
(
)
)
Повторіть цей процес з кожною парою дужок, перезаписуючи попередні символи +
s, якщо потрібно.
+---+
| |
| +-+---------+
| | | |
+-+-+ |
| |
| [ |
| |
| < |
| |
| ( |
| |
| ] |
| |
+-----------+
)
>
(
(
)
)
Продовжуйте, поки ви не зробите все приємне і квадратне.
+---+
| |
| +-+---------+
| | | |
+-+-+ |
| |
| +-----+ |
| | | |
| | +---+-+---+
| | | | | |
| | | +-+-+-+ |
| | | | | | | |
| +-+-+-+ | | |
| | | | | |
+-----+-+---+ | |
| | | |
| +-----+ |
| |
+---------+
+-----+
| |
| +-+ |
| | | |
| +-+ |
| |
+-----+
Вхідні дані
Введеним буде один рядок врівноважених дужок і ніяких інших символів, причому кожна дужка буде однією з []{}()<>
. Кожен тип дужок збалансований індивідуально, хоча різні типи можуть перетинатися (саме це і робить квадратики цікавими). Новий рядок не є обов'язковим.
Вихідні дані
Виходом буде квадратний шаблон, що замикається, генерований із дужки. Проміжки пробігу та новий рядок не є обов'язковими, але не повинно бути провідних пробілів.
Мета
Це кодовий гольф, виграє найменше байт.
[[]]
можемо ми вивести два квадрати, що перекриваються, або ми повинні вивести один квадрат всередині іншого?