最近のあなごる

没コード集。

608. GCD Again

ケース数が鬱陶しい。ケース数の無視は、scanf("%d",gets(&x))が+6Bで典型だけど、行内に複数入力あったり、vprintfと組み合わせるために"%d\n"を使うと破綻する。変数増やしてprintfに条件をつけると+7B。

GCDは普通に割り算してswapが短いのかな。結果がゼロになったり、ゼロ割になったり、ループ統合と相性が悪い。

// AC 112B
p;main(N,g,d){for(;~scanf("%d",gets(&N));p=!printf("%d\n",g))for(g=999;N--;p=g)for(scanf("%d",&d);p%g+d%g;g--);}

// AC 110B
G,x,N,d;main(g){for(;~scanf("%d",x?!N--?d=G=d&&!printf("%d\n",g),&N:&d:&x);G=d?g:0)for(g=G?:999;G%g+d%g;)g--;}

// AC 108B
p,x,N,d;main(g){for(;~scanf("%d",x?!N--?d=p=d&&!printf("%d\n",g),g=999,&N:&d:&x);p=d?g:0)for(;p%g+d%g;)g--;}

// AC 105B
p,x,N,d;main(g){for(;~scanf("%d\n",x?!N--?d=p=d&&!vprintf(),g=999,&N:&d:&x);p=d?d=g:0)for(;p%g+d%g;)g--;}

// AC 101B
p,x,N,d;main(g){while(p%g+d%g?g--:~scanf("%d\n",x?!N--?d=p=d&&!vprintf(),g=999,&N:&d:&x,p=d?d=g:0));}

// AC 94B
p,x,N,d;main(g){for(;~scanf("%d\n",x?!N--?d=p=d&&!vprintf(),&N:&d:&x);p=d)for(;g=p;d=g)p=d%g;}

// AC 93B
p,x,N,d;main(g){while(p?g=p,p=d%p,d=g:~scanf("%d\n",x?!N--?d=p=d&&!vprintf(),&N:&d:&x,p=d));}

// AC 93B
p,N,d;main(g){while(d?g=d,d=p%d,p=g:~scanf("%d",!N--?d=p=p&&!printf("%d\n",p),gets(&N):&d));}

// AC 92B
p,N,d;main(g){while(d?g=d,d=p%d,p=g:~scanf("%d",N--?&d:gets(&N,d=p=p&&!printf("%d\n",p))));}

// AC 90B
p,N,d;main(g){while(d?g=d,d=p%d,p=g:~scanf("%d",N--?&d:gets(&N,p=p&&!printf("%d\n",p))));}

// AC 89B
p,x,d;main(N,g){while(d?g=d,d=p%d,p=g:~scanf("%d",!N--?p=x++&&!printf("%d\n",p),&N:&d));}

// AC 88B
p,x,d,g;main(N){while(d?g=p%d,p=d:~scanf("%d",!N--?p=x++&&!printf("%d\n",p),&N:&g))d=g;}

609. Fixed Rows

通らないだろうと思いながら何度かぽちぽち叩いてたらrandコードが通ってしまってごめんなさい。

606. Cross Product of two Strings

printfの位置指定を使うぐらいなら、putcharを三回呼んだほうが短いらしい。最初の試行でscanfの%nやstrchr(index)を使うと短くならない気がしていたのだけど、inaniwaさんの113Bではindexをうまく使っている。

ループ統合はぬるぽの予感がして考慮してなかった。よく考えるとwhileの5B分縮まるので、多少余計な項が入っても平気なのだった。

// 134B
char a[99],b[99];main(i,m,n){for(;~scanf("%s%n%s%n",a,&m,b,&n);)for(n+=~m,i=0;i<m*n;i++)printf("%c%c%c",a[i/n],b[i%n],m*n+~i?32:10);}

// 124B
main(i,n,a,b){for(;gets(a);)for(i=n=strlen(b=1+strchr(a,32));a+i/n<b;i++)printf("%.1s%.1s%c",a+i/n-1,b+i%n,a-~i/n<b?32:10);}

// 116B
char*a,*b;main(i,B){for(;~scanf("%s%s",a=B+16,b=B);)for(;printf("%c%c",*a,*b),!*++b?a++,b=B:0,putchar(*a?32:10)%5;)}

// 116B
char*a,*b;main(_,B){for(;~scanf("%s%s",a=B+16,b=B);)for(;*a;)printf("%3$c%2$c%1$c",*(!*++b?b=B,++a:a)?32:10,*b,*a);}

// 113B
char*a,*b;main(_,B){for(;~scanf("%s%s",a=B+16,b=B);)for(;_=*a;)printf("%c%3$c%c",_,*(!*++b?b=B,++a:a)?32:10,*b);}

// AC 112B
char*a,*b;main(_,B){while(~scanf("%s%s",a=B+16,b=B))while(*a)putchar(_++%3?_%3?*a:*b:*(!*++b?b=B,++a:a)?32:10);}

// AC 110B
char*a,*b;main(_,B){while(~scanf("%s%s",a=B+16,b=B))while(*a)putchar(_++%3?_%3?*a:*b:*++b||(b=B,*++a)?32:10);}

// AC 108B
char*a,*b;main(_,B){while(a&&*a?putchar(_++%3?_%3?*a:*b:*++b||(b=B,*++a)?32:10):~scanf("%s%s",a=B+16,b=B));}

610. Similarity Expansion

複数行入力で、最後の行だけ改行がついてないとかやめてほしい。

// uso 86B
b;main(c){char*p=&b;while(read(0,&c,1))c>10?!*p++|c>34?p[-1]=c,*p*=c<36:0:puts(p=&b);}

// WA 83B
main(c,b){char*p=b;while(read(0,&c,1))c>10?!*p|c>34?*p++=c,*p*=c<36:p++:puts(p=b);}

// AC 84B
main(c,b){char*p=b;for(;~c;c>10?!*p|c>34?*p++=c,*p*=c<36:p++:puts(p=b))c=getchar();}

15. Card Sharp

すごく縮んだ。五年前と今とで考え方が違うのかなぁ。バイナリ(たぶん\0)は使ってるようだし、テクニックとしては同じだと思うのだけど。

あなごるは-Oでコンパイルされることを初めて知った。ずっと-O0でテストしていて、-O1以上で通らないコードになっててハマった。

// WA
main(a,b){gets(&a);bを使ったコード...}

// AC
a,b;main(){gets(&a);bを使ったコード...} (グローバル変数の並び順は適当に)

618. Bitwise Counting

ushたんのバイナリ2Bが謎すぎる。大きい定数あったかなぁ。ASCIIで追いついたけど、もしかすると二人のコードを合わせたらもっと短くなるのかもしれない。