> y.real-at999.z @ a.at.real-at2.bc -> > y.real-at999.z.real-at1000.a.at.real-at2.bc
Still ambiguous. So the generated s/at/real-at$n/ is the last occurrence of a numbered "real-at" plus 1. What if we need it twice, and there are 3 such thingies in total? How do we know we only need to "decode" 1 -- or do we need to decode2? Or maybe even all three, if they start at 1... Sorry, Adam. ;) -- char *t="\10pse\0r\0dtu...@ghno\x4e\xc8\x79\xf4\xab\x51\x8a\x10\xf4\xf4\xc4"; main(){ char h,m=h=*t++,*x=t+2*h,c,i,l=*x,s=0; for (i=0;i<l;i++){ i%8? c<<=1: (c=*++x); c&128 && (s+=h); if (!(h>>=1)||!t[s+h]){ putchar(t[s]);h=m;s=0; }}}