カメヲラボ

主にプログラミングとお勉強全般について書いてます

Superlong sums(2)

getsを使うのはムズカシイ。

PKUではネットで公開されている問題を寄せ集めていて、テストケースも公開されている場合はそのまま使っている場合が多い。しかし独自に作成したテストケースも当然あるわけで、その場合は改行や空白の形式が統一されている保証が無い。gets関数を使用する場合は、scanfの時と違ってこの辺りの問題がシビアだ。今回のテストケースも、空行が入っているケースがあったり無かったりで何度submitしてもWAの嵐になる。私はscanfしか無いかなーと思っていたのだが、ロベールさんがgetsのみの使用で通すことに成功した。私は完全に降参状態だったのでgets周りの記述方法を教えてもらい、ごにょごにょしながらようやく110Bにたどりついたわけだ。

とっても短いコード110B


char*p,a['!!!'];
main(){
for(gets(p=a);gets(p)**p;*p+=p++[2]-48);
for(*p=0;p>a;)*p-->57?++*p,*++p-=10:0;
puts(a);
}


getsを使って直接配列に読み込み、配列内で加算している。getsの部分もスバラシイのだが、ポインタの使い方がこれまたシュゴー!(゚д゚)だ。これは私がいくつか書いたコードの中の一つで、他のパターンもある。ロベールさんに見せてもらったコードも私が書いたコードと違うものだったので、110Bコードはいくつかパターンがあるようだ。興味のある人はいろいろ考えてみると良いだろう。


追記:id:kurimuraさんがさらに短縮されたようなので、最短コードをとっても短いコードに変更しました。


さらに追記:kurimuraさんの107Bコードを106Bにしたけどこれ以上はワカラン。早いうちに公開します。