- 521 名前:デフォルトの名無しさん mailto:sage [02/07/21 18:14]
- >>520
協力しようと思いましたが、あまり縮みませんね。 ロジック部が良くわからないので、ソース追いかけ中です。 定数やそのシフトを変数にできそう。(1<<24とか) f=u-1 で置き換えると、もう少し短くなりそうですが・・・ #include <stdio.h> size_t l,r=~0,z,q,e,u[257],f[256],c=5,x=256;main(int g,char**v){FILE*n=fopen(v[ 2],"rb"),*o=fopen(v[3],"wb");int(*t)()=fgetc;if(g=*v[1]-69)for(fread(&z,4,1,n), fread(f,4,x,n);--c;)e=e*x|t(n);else{for(;~(c=t(n));f[c]<255?f[c]++:0)z++;fwrite (&z,4,1,o);fwrite(f,4,x,o);fseek(n,c=0,0);}for(;c<x;c++)u[c+1]=u[c]+f[c];while( g?z--:~(c=t(n))){r/=u[x];if(g){for(q=(e-l)/r,c=x;--c&&q<u[c];);fputc(c,o);}for( l+=u[c]*r,r*=f[c];(l^l+r)<1<<24||r<1<<16&&(r=65535&~l+1);)g?e=e*x|t(n):fputc(l >>24,o),r*=x,l*=x;}for(c=4;!g&&c--;)fputc(l>>c*8,o);}
|

|