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); }