Superlong sums(3)
最短コード106B
kurimuraさんが110バイトを切るコードを編み出したhttp://d.hatena.ne.jp/kurimura/20060301
このコードのすばらしいところは、終了判定が*pで可能なことだ。110バイトのコードでは終了判定にgets(p)&&*pとしているため、次のループで*p=0と書かなければならない。*p=0が省略できるということだけで、単純に「4バイトは縮むかな」と私は思った。kurimuraさんのコードは107バイトだが、GCCだし、a[-1]にアクセスした位じゃ落ちないんじゃないカナ?と思ったので以下の様にしてみたらAcceptされた。これで106B。
a['!!!'];
main(char*p){
for(gets(p=a);gets(p),*p;*(int*)p++%=85);
for(;*--p;)*p+=*p>52?++p[-1],-5:5;
puts(a);
}
int*へのキャストが気になってしまうのだが、たとえば
のように書いてもコード短縮にはならない。
a['!!!'];*d;
main(char*p){
for(gets(p=a);gets(p),*p;*d%=85)d=p++;
for(;*--p;)*p+=*p>52?++p[-1],-5:5;
puts(a);
}
私のアイデアではこれが限界だ。というわけで一応最短コードとして公開することにする。これらのコードを参考にして105B以下のコードが通ったらまた教えて下さい > Short Coders