GCJ qualification round problem A analysis

ってことで、Problem Aの周りの人たち(勝手にfriendに入れた人たち)のソースをちょろちょろ読んだ結果を報告。
正規表現で()と[]を変換すりゃいいよねってのは、書いたとおりなのだけど、正規表現でやってるひとは周りの人たちで30%くらいかなあ。k.inaba氏はJava Scriptでやってた。kogitsune氏はPerlで、ショートコーディングをやってた。118byte。ただ、最初のforを後置にするだけであと2byte減ったけど・・・?
LayCurse氏は、C。下の二行のマクロが特徴的。

#define REP(i,a,b) for(i=a;i

確かに、ループをまわすのになんでiを3回も書かなきゃいけないのかとは思うし、

for(j = 0; j

見たいなよくある間違いも無くなるな。ちなみにLayCurse氏とmayah氏、wata氏、iwi氏あたりは、言語を除いてほぼ同じアルゴリズム。手法としては、パターンに含まれる文字をフラグとして用いる。例えば、(ac)ってパターンに対しては

chk['a']=1
chk['c']=1

見たいな感じで保持。26種類しか文字が無いからって、ビットで管理している人はいなくて、みんなintで管理してたと思う。枝狩りとして、マッチが失敗したときのbreak処理を入れてるのはこの中だとmayah氏だけかな。時間的にはほとんど問題ないので関係ないけど。あと、LayCurse氏だけはパターンの方を読みながら、1文字ごとにマッチングチェックをしていた。
で、誰も・・・誰もTrieなんて作ってねえようわあああぁぁぁぁぁぁん。