画像処理2

もうちょっと縮んだヤツ。
結局前から30バイトぐらい縮んでる。そして恐らくこのへんが限界。
律儀にエラー処理しなければもっと縮むけど。

#include<stdio.h>
FILE*i,*o;int x,y=0,W,H,s,t,m[9999][9999]={0};M(j){return 1023<<j*10;}S(j,f){re\
turn j*10+(j-1?f:0);}P(p){fputc(((m[y][x]&M(s))>>S(s--,1))/p,o);}O(p,q){s=2,P(q/
4),P(p&1?3:4),P(q&3);}L(s,d){while(s/=4)m[y+(s/d&3)-1][x+(s&3)-1]+=t;}N(j){m[y][
x]+=((t=fgetc(i)<<S(j,0))*4);L(400,4);--j&&L(108800,16);x++;}main(int c,char**v)
{char s[99];if((i=fopen(v[1],"rb"))&&(o=fopen(v[2],"wb"))&&!strncmp(fgets(s,99,i
),"P5",2)){while(fgets(s,99,i)&&*s=='#');sscanf(s,"%d %d",&W,&H);if(atoi(fgets(s
,99,i))==255){while(++y<=H)for(x=1;x<=W;)y&1&&N(2),N(1),~y&1&&N(0);fprintf(o,"P"
"6\n%d %d\n255\n",W,H);for(y=x=1;x<=W;x++)O(x,9);while(x=1,++y<H){O(y,9);while(
++x<W)O(0,10);O(y,9);}while(x<=W)O(~x,6),x++;}}S(0,0);}

と思ったらさらに30バイト縮みました('ω`)
700バイト下回った(・д・)

#include<stdio.h>
FILE*i,*o;int x,y=0,W,H,s,t,m[9999][9999]={0},S[]={1,10,21};P(p){fputc(((m[y][x]
&(1023<<s*10))>>S[s--])/p,o);}O(p,q){s=2,P(q/4),P(p&1?3:4),P(q&3);}L(s,d){while(
s/=4)m[y+(s/d&3)-1][x+(s&3)-1]+=t;}N(j){m[y][x]+=((t=fgetc(i)<<j*10)*4);L(400,4)
;--j&&L(108800,16);x++;}main(int c,char**v){char s[99];if((i=fopen(v[1],"rb"))&&
(o=fopen(v[2],"wb"))&&!strncmp(fgets(s,99,i),"P5",2)){while(fgets(s,99,i)&&*s==
'#');sscanf(s,"%d %d",&W,&H);if(atoi(fgets(s,99,i))==255){while(++y<=H)for(x=1;x
<=W;)y&1&&N(2),N(1),~y&1&&N(0);fprintf(o,"P6\n%d %d\n255\n",W,H);for(y=x=1;x<=W;
x++)O(x,9);while(x=1,++y<H){O(y,9);while(++x<W)O(0,10);O(y,9);}while(x<=W)O(~x,6
),x++;}}return 0;}