チャーチ数ゴルフ

anarchy golf - Church Numerals in ski の C。346 バイトもあるし、死ぬほど遅い(test 2 が 1 分くらいかかる)ので出直してくる。

char*p,*q,*r,*u,s[2]['~~~'];x;n;m;
f(){for(n=0;~n&&*u;u++)*u-96?n--:n++;}
main(){
    for(;gets(s[x]);printf("%d\n",m))
        for(m=0,strcat(s[x],"+0");p=s[x],*p-48;
                *p<'j'?
                strcpy(s[x],p+1),*p-'i'&&m++:
                (u=p+1,f(),q=u,f(),*p-'k'?
                 r=u,f(),sprintf(s[x],"%.*s%.*s`%.*s%.*s%s",q-p-1,p+1,u-r,r,r-q,q,u-r,r,u):
                 sprintf(s[x],"%.*s%s",q-p-1,p+1,u)))
            p+=strspn(p,"`"),x^=1;
}