Austin Ziegler wrote:

> There are other rules, I'm sure, because these two rules could be,
> at least theoretically, converted into c(c)v(c).

After making the following change

rules = %w( c(c)v(c). ).inject([]){|a,s| a<< s.to_syllrule }

the output becomes

pes.o
prad.a
fal.do
bran.di