- 580 名前:デフォルトの名無しさん [02/07/28 15:43]
- 前スレのスライド辞書圧縮
pc3.2ch.net/test/read.cgi/tech/984182993/153-154 符号化と復号とが分かれていたので、いっしょにしてみました。現在9行。 #include <stdio.h> int(*p)()=putchar,(*q)()=getchar,f=1023,g,j,k,l,m,n=127,s;char*d=0;r(o){for(p(o );o--;)p(d[g++]);}main(int i){if(i>1){l=getw(stdin);for(d=malloc(l+8);s<l;){g=q ();if(g<n)for(i=g;i--;)d[s++]=q();else for(k=q()+(g-128)*256,i=k>>10,j=s-(k&f); i--;)d[s++]=d[j++];}for(;l--;)p(*d++);}else{for(;~(s=q());d[l++]=s)d=realloc(d, l+9);putw(l,stdout);memset(d+l,0,8);for(l+=8;s<l-3;s++){m=1;j=s>31?31:s;j=l-s-2 >j?j:l-s;for(;j>2;j--){for(i=s<f?0:s-f;i<s;i++)if(!(m=memcmp(d+i,d+s,j))||i+j>l )break;if(!m)break;}if(!m){for(k=s-g;k>n;k-=n)r(n);k&&r(k);p(128+j*4+(k=s-i)/ 256);p(k%256);g+=j;s=g-1;}}}}
|

|