七行プログラミング part2at TECH
七行プログラミング part2 - 暇つぶし2ch560:デフォルトの名無しさん
02/07/25 14:18
前スレのハフマン符号 スレリンク(tech板:194番)
アルゴリズムをほとんど見ずに、ステートメントだけで縮めてみました。

int b,i,j,l,m,n=1024,c,p=7,h[32],y=16;r(h,b){for(;b--;!p--?putchar(c),c=0,p=7:0
)c|=(h>>b)%2<<p;}q(int*a,int*b){return*a-*b;}struct v{int i,b,h,n;}*v,*f;struct
{int n,i,e,k;struct v v[63];}x[32]={0,},*a=x;main(){char*d=0;for(;~(b=getchar()
);a[d[l++]=b%y].n++)a[(d=realloc(d,l+2))[l++]=b/y].n++;for(i=32;i--;)a[a[i].i=a
[i].v[0].i=i].e=1;qsort(a,y,n,&q);for(b=17,i=0;!x[i++].n;a++)b--;for(;2<b;a+=2)
{qsort(a,b--,n,&q);for(j=1;j<3;j++)for(i=0,v=a[j].v;i<a[j].e;i++)v[i].h|=j%2<<v
[i].b++;m=a[1].e;memcpy(a->v+a->e,a[1].v,m*y);memcpy(a->v+m+a->e,a[2].v,496);a
->e+=m+a[2].e;a->n+=a[1].n+a[2].n;memcpy(a+2,a,n);}for(i=0;i<y;i++)for(j=0;j<32
;j++)if((f=a->v+j)->i==i)r(f->b-1,4),r(f->h,f->b),h[i]=f->b,h[i+y]=f->h,j=32;
for(i=0;i<l;r(b+y,b))b=h[d[i++]];p-7&&r(0,p);}


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch