カメヲラボ

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

Speed Limit

最短コード110B

速度と時間の変化が与えられていて、進んだ距離の合計を求めるというだけの問題。たとえば、


20 2
30 6
10 7
というインプットであれば左の列が速度、右が時間を表していて、

0〜2秒間:秒速20マイル
2〜6秒間:秒速30マイル
6〜7秒間:秒速10マイル
で進むという意味で、その合計は

 20*(2-0) + 30*(6-2) + 10*(7-6)
= 40 + 120 + 10
= 170
ということになる。

この問題を見た時すぐに思い浮かんだコード(112B)がコレ。


a,b,o,s;main(n){
 for(;scanf("%d",&n),~n;printf("%d miles\n",s))
 for(s=o=0;n--;s+=a*(b-o),o=b)scanf("%d%d",&a,&b);
}
くりむらさんとロベールさんがが111Bで通していたので、私も考えてみた。で、



a,b,o,s;main(n){
 for(;scanf("%d",&n)+n;printf("%d miles\n",s))
 for(s=o=0;n--;s+=a*(b-o),o=b)scanf("%d%d",&a,&b);
}
これで111バイトじゃーんってことで、ロベールさんに「こんなかんじ?」と聞いたら、


『s+=a*=b-oにすればもう1バイト縮みますよ』と教えてもらったので、これとあわせて110Bコード完成!


a,b,o,s;main(n){
 for(;scanf("%d",&n)+n;printf("%d miles\n",s))
 for(s=o=0;n--;s+=a*=b-o,o=b)scanf("%d%d",&a,&b);
}