2579 Blurred Vision

2579 -- Blurred Vision
↑のコード長のページ
0から9までの値を持つ二次元画像(幅、高さともに最小2、最大9)がいくつか与えられ、それにアンチエイリアスをかけなさい、という問題。
四点(ある点とその右と下と右下の点)の値を取り、その平均を求めて新しい値とするので、できあがった画像は縦横ともに1ずつ小さくなります。
各セットは、

START H W
...(W*Hの矩形)
END

の繰り返しで、最後にENDOFINPUTSが来ます。
各セットの間には余計に空行を入れる必要はありません。
GCCではだめだったので、Cで102byte。
2006/01/09 帰り道に思いついた。96byte。
と、その前に最初に通ったソースも晒しておきます。
GCCで192byte。

char a[11][10];
i,j,w,h;
main(n){
  for(;scanf("%*s%d%d",&h,&w);){
    for(i=0;i<=h;)scanf("%s",a+i++);
    for(j=0;j<h-1;puts(""),j++)
      for(i=0;i<w-1;i++)
        putchar(a[j][i]+a[j+1][i]+a[j][i+1]+a[j+1][i+1]>>2);
  }
}

何の変哲もないコードですが、これが半分になるわけです。
まぁ、mainの第二引数をバッファ領域として使っているのでGCCでは通らないんですが。

char*c;
main(i,a){
  for(;gets(c=a+=9);)
    for(;*c>57?i=0:i++**c++;)
      putchar(*c?c[-9]+c[-10]+*c+c[-1]>>2:10);
}

バッファ領域の使い捨てがやはり酷すぎるか。
96byte

char*c;
main(i,a){
  for(;gets(c=a+=9);)
    for(;*c&c[-9]&32;)
      putchar(*++c?c[-9]+c[~9]+*c+c[-1]>>2:10);
}