2011年6月1日水曜日

anarchy golf - Ejection解答編

anarchy golf - Ejection

妙に長いままおわっちゃったなぁ。

ネスト付で書くと
m,n;
i,j;
char*p,s[80];
u[80];
r[80];
d[80];
v;e;
main(){
    for(;p=gets(s);n++)for(m=0;*p;m++)
        v=*p-85||v/++u[m]?v:u[m],
        *p-82||++r[n],
        e=*p++-68||e/++d[m]?e:d[m];
    for(;v--;j=!puts(s))
        for(i=m;i--;)
            s[i]=u[i]>v?j=32,85:j;
    for(j=v;++j<n;puts(s))
        for(s[i=m+r[j]]=0;i--;)
            s[i]=i<m?j%~-n&&i%~-m?32:35:82;
    for(j=0;e/++j;puts(s))for(s[i=m-1]=0;i--;)
            s[i]=d[i]/j?68:32;
}
やってることはシンプルですね。よく考えればフィールドは正方形なので横がわかれば縦もわかるんだよね。
もう一度やり直したらずいぶん縮むかも。でも簡易版Ejectionが出題されたのでそっちに行きますw

ちなみに枠線判定のj%~-n&&i%~-mはj%(n-1)&&i%(m-1)の意味。
0~(n-1)のn個の数列の両端のとき0になります。

0 件のコメント:

コメントを投稿