Bracketeer™という、古くからありながら強力なメインフレーム用のソフトウェアを書く機会が与えられました。 その上で動くソフトウェアは、独自の言語で書かれています。 構文の多くは見慣れたものですが、角括弧、波括弧、丸括弧が_たくさん_あることに気づきます。 Bracketeer™は強力ですが、柔軟性に欠けています。 ソースコードの中に、対応の取れていない角括弧、波括弧、丸括弧が1つでもあると、Bracketeer™はクラッシュし、再起動しなければなりません。 そうならないために、Bracketeer™で実行する前に、角括弧、波括弧、丸括弧の対応が取れているかを確認するコードを書き始めます。
角括弧([])、波括弧({})、丸括弧(())、またはこれらの組み合わせを含む文字列が与えられます。
すべてのペアが正しく対応し、入れ子になっていることを確認してください。
それ以外の文字は無視します。
たとえば、"{what is (42)}?"はバランスが取れていますが、"[text}"はバランスが取れていません。
この演習を解く方法はたくさんありますが、自分でabilityハンドラーを書く練習をしてみたい人のために、追加のスタブをいくつか用意しました。
この演習で用意されているヘルパー関数checkBalanceのシグネチャは、abilityの要件{Stack}を利用しています。
abilityであるStackはあらかじめ定義されていますが、そのハンドラーであるStack.runは定義されていません!
希望する場合は、Stack.run、checkBalance、isPairedの各関数を自分で実装してもかまいません。
abilityを使わずにこの演習を実装しても、テストは実行されます。