easy regexp in anagol

終わりました。
ギリギリRubyでは一位だったけれど、週末だったら負けてたよなあという感じです。
まあ時間ないのはボクも同じというか、バイト先で休憩中に紙にゴリゴリコード書くのは止めた方がいいよ。
とりあえずコード貼り付け。

a=[""]
gets.scan(/(\W(.+?)[\])]|.)(\??)/){b=[""]-[$3]+($2||$1).split($1["|"]||"")
a.map!{|s|b.map{|t|s+t}}.flatten!}
puts a

我ながら割と綺麗な感じに。
とりあえずよくよく考えるとこれは再帰で解くのが普通だろう…と思ったのだった。
A[BC](DE|FG)とかあったとして、結局は…

A
AB        AC
ABDE ABFG ACDE ACFG

なわけで、この図見れば普通は再帰で解こうと考えるよなーそうだよなー。
どうにも最近、アルゴリズム考える前にとりあえずあるもので間に合わせの解答を作ってガリガリ縮める…という感じな気がする。よくない。