「うわっ!なんてひどいコードだ!」
古いソースコードを開きながら先輩が叫んでいる. また面倒な仕事が押し付けられそうだ…….
ソースコードにはめまいがしそうなほどたくさんの if 文が並んでいる.
if 条件文 1; 命令 1 if 条件文 2; 命令 2 if 条件文 3; 命令 3 ...
どうやら制御の構造はそれほど複雑ではないらしい.
1 つの条件文には,変数と NOT 演算子 "~" ,そして AND "&" / OR "|" の 2 項演算子が現れる. 変数は真または偽を表し,変数名は1文字以上のアルファベットで表される. 演算の順序は NOT 演算子が優先だが,括弧で先に計算するよう順序を変えてもよい. 変数は 1 つもしくは 2 つ,2 項演算は高々 1 回,それ以外は何度でも現れて良い.
とりあえずコンパイルは通った. コードを修正する前にテストを書く必要がある. 今回頼まれたのは,このコードのテストケースを書く作業だ. テストケースの数は,全ての命令が 1 度以上実行されれば十分である. テストケースの数を見積もって, 1 つで済むようなら引き受けることにしよう.
与えられる入力は以下のように表される.
N ( 1 ≦ N ≦ 500 ) 行の条件文が現れ,条件文中には M ( 1 ≦ M ≦ 500 ) 種類の変数が存在する. 条件文 condi は最大 1000 文字である. また,変数名は10文字を超えない.
作業を引き受けるなら accept,拒否するなら reject を 1 行出力せよ.
3 4 ~~(~A|B); ~(~C&~D); ~(~A|~~D);
accept
2 1 var; ~var;
reject