На цьому сайті є кілька запитань щодо балансування дужок та перевірки того, чи дужки врівноважені. Я пропоную зараз використовувати ці збалансовані дужки для чогось!
У математиці та програмуванні дужки схожі на бульбашки, ізолюючи все, що знаходиться всередині, все, що знаходиться зовні, так що все, що знаходиться всередині, може робити це в спокої, а все, що знаходиться назовні, бачить лише один предмет. Однак рядок дужок є одновимірною, тоді як бульбашки, як правило, принаймні двовимірні. Це означає, що бульбашки вільно пересуваються один до одного, доки вони ніколи не торкаються один одного або не перетинаються між внутрішньою та зовнішньою стороною будь-яких інших бульбашок.
Виклик
Вхід - це рядок відповідних дужок одного типу, круглих ()
, квадратних []
, фігурних {}
або кутових <>
. Ви вирішуєте, який тип програми ви бажаєте прийняти, а програма, яка приймає лише один вид дужок. (Уявний бонус, якщо ваша програма може обробляти будь-який з них, масивні уявні бонусні бали, якщо вона може обробляти всі вони на одному вході.) Вхід не може містити нічого між дужками, хоча можливі пробіли білих просторів.
Вихід - це всі можливі реорганізації (у довільному порядку, включаючи оригінальний вхід) тих дужок, які дають однакову конфігурацію бульбашок, без двох однакових рядків. Це означає, що з введенням ()()
, вихід також справедливий ()()
, навіть якщо технічно два бульбашки можуть міняти місцями. Для масового уявного бонусу, введення {}[]()
волі, звичайно, призведе до виходу 6 різних елементів / рядків / рядків.
Дві конфігурації бульбашок є "однаковими", якщо ви можете зробити один в інший, переміщаючи бульбашки навколо, не даючи жодному міхуру перетинатися зсередини іншого міхура назовні або ззовні всередину. Якщо ви порівнюєте вкладені дужки з деревами (кожна відповідна пара - один вузол, і кожна відповідна пара всередині - це підвузл, і кожна відповідна пара всередині є підвузлом цих знову тощо), де упорядковані підвузли будь-якого даного вузла , то єдина конфігурація бульбашок - це дерево, де вузли не упорядковані.
Будь-який розумний формат виводу буде виконуватись, як-от повернення списку рядків або список списку одиночних символів або одна рядок з якимось пробілом, або друк до stdout
або stderr
з якоюсь формою видимого символу пробілу (найчастіше нової лінії чи пробілу) між кожна реорганізація.
Пробіли для кожної реорганізації та відстеження та попередніх елементів рядків / порожніх списків до та після фактичного виходу дозволено. Ви повинні використовувати такі ж дужки у своєму висновку, як і у своєму введенні. Крім дужок, нових рядків та пробілів, як зазначено тут, і незалежно від того, яким розділювачем ви користуєтесь, нічого не слід друкувати (включаючи символи невидимої / нульової ширини).
Оцінка - кількість байтів у коді; найнижча кількість кожного виграшу мови. Ви можете відзначити, отримуєте ви уявний бонус, регулярний чи масовий, але це не впливає на ваш рахунок. Фактичні бонуси занадто важкі, щоб правильно збалансувати.
Приклади введення-виведення
Приклад 1:
Вхід:
()(())
Вихід:
()(())
(())()
Приклад 2:
Вхід:
(()())()()
Вихід:
(()())()()
()(()())()
()()(()())
Приклад 3:
Вхід:
(()(()))()
Вихід:
((())())()
()((())())
(()(()))()
()(()(()))
((()))
приклад 1? або()()()
? Схоже, вам не вистачає перестановок для кожного введення.