最近のあなごる
没コード集。
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で追いついたけど、もしかすると二人のコードを合わせたらもっと短くなるのかもしれない。