画像処理

画像処理の講義の課題のプログラミングをやっていた。
まぁぶっちゃけ普通に組んだらワリとすぐ終わってしまうので詰まらない。
よって圧縮。約10行になりました*1
動作を説明しろって言われて説明できる人がいるなら、もって行っていいよ。

#include<stdio.h>
FILE*i,*o;int x,y,W,H,s,t,m[9999][9999]={0};M(j){return 1023<<j*10;}S(j,f){return
j-1?j*10+f:j*10;}P(j,p){fputc(((m[y][x]&M(j))>>S(j,1))/p&255,o);}O(p,q){P(2,q/4),
P(1,p&1?3:4),P(0,q&3);}L(s,d){for(;s;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)&M(j);t&=M(j);L(100,4);if(j-1)L(27200,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)){do{fgets(s,99,i);}while(*s=='#');sscanf(s,"%d%d",&W,&H);if
(!atoi(fgets(s,99,i))-255){for(y=1;y<=H;y++)for(x=1;x<=W;)(y&1?N(2):0),N(1),~y&1?
N(0):0;fprintf(o,"P6\n%d %d\n255\n",W,H);for(y=x=1;x<=W;x++)O(x,9);for(y++;x=1,y<H
;y++){O(y,9);for(x++;x<W;x++)O(0,10);O(y,9);}for(x=1;x<=W;x++)O(~x,6);}}return 0;}

*1:ちょっとずるしてる