Нам випала нагода написати програмне забезпечення для Bracketeer™, старого, але потужного мейнфрейма. Програми, що на ньому працюють, написані пропрієтарною мовою. Багато в її синтаксисі нам знайоме, але ми помічаємо безліч дужок: квадратних, фігурних і круглих. Попри всю свою потужність, Bracketeer™ позбавлений гнучкості. Якщо у вихідному коді є хоч одна незбалансована дужка (квадратна, фігурна чи кругла), Bracketeer™ падає і його доводиться перезавантажувати. Щоб уникнути такого розвитку подій, ми починаємо писати код, який перевіряє, що квадратні, фігурні та круглі дужки збалансовані, перш ніж спробувати запустити його на Bracketeer™.
Дано рядок тексту (англ. string), що містить квадратні дужки [], фігурні дужки {}, круглі дужки () або будь-яку їхню комбінацію. Перевірте, що всі пари збігаються та правильно вкладені одна в одну. Будь-які інші символи слід ігнорувати. Наприклад, "{what is (42)}?" збалансований, а "[text}" ні.
Існує багато способів виконати цю вправу, але ми підготували додаткові заготовки для тих, хто хоче потренуватися писати власні обробники здібностей.
Сигнатура допоміжної функції checkBalance, наданої для цієї вправи, використовує вимогу здібності, {Stack}.
Здібність Stack уже визначено, а обробник Stack.run - ні!
За бажанням можна реалізувати функції Stack.run, checkBalance та isPaired.
Тести запустяться, навіть якщо цю вправу не реалізовувати зі здібностями.