5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

七行プログラミング

146 :*nix厨:2001/03/14(水) 01:20
仕切りなおし。
#include <stdio.h>
int e=31,f=1023,g=0,h,i,j,k,l=0,m,n=127,s;char *d=0;main(){while((s=getchar())-EOF){d=
realloc(d,l+1);d[l++]=s;}d[l]=0;for(s=0;s<(l-3);s++){j=(s>e)?e:s;for(m=1,j=((l-s-2)>j)?j:(
l-s);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){if(s-g){for(k=s-g;k>n;k-=n){putchar(n);for(h=0;h<n;h++)putchar(d[g++]);}
putchar(k);for(;k>0;k--)putchar(d[g++]);}putchar(0x80+(j<<2)+(s-i)/256);putchar((s-i)%256)
;s=(g=s+j)-1;}}putchar(l-s);for(i=s;i<l;i++)putchar(d[i]);return 0;}

下記データが並んだのフォーマット。
先頭バイトの*値*が0x80未満なら以降の*値*バイトが未圧縮。
0x80以上なら次のバイトと合わせて先頭ビットがフラグ(1=圧縮)、7-16ビットが
一致する相対位置、2-6が一致するバイト数。

これで復号も可能なデータになったはずだけど、バグがあるかも。

362 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)