AOJ #0592 Averageでgolfをしようとした
タイトル通りです.AOJの#0592 AverageのPythonでの提出に関してtwitterで見て,「そういえばゴルフとかあったよな・・・?」と思い立ってやってました.golf(=ゴルフ)とはcode golfのことで,目的の出力をするプログラムを以下に少ない文字数(ストローク数)で作成するかを競うものです(参考:http://vipprog.net/wiki/?cmd=read&page=code%20golf%E5%85%A5%E9%96%80%2FC%E8%A8%80%E8%AA%9E%E7%B7%A8&word=%E3%82%B4%E3%83%AB%E3%83%95).
なにか適当な問題で出来ないかなー,とか考えていたのですが,とりあえず最初に思い立った#0529でやってみることにしました.以下,ソースコードを含めます.
最初(一番最初に問題をACしたときのコード)
#include<iostream>
using
namespace
std;
int
main(){
//宣言
int
x[5];
int
sum;
sum=0;
//roop input
for
(
int
i=0;i<5;i++){
cin >> x[i];
}
//sum
for
(
int
i=0;i<5;i++){
if
(x[i]<40){
x[i]=40;
}
sum = sum+x[i];
}
sum=sum/5;
//roop output
cout << sum << endl;
}
一番無駄が多いコードです.コメント入れたり意味のない改行をしていたりと,無駄しかありません.
次
#include <iostream>
using
namespace
std;
int
main() {
int
x[5],sum;
for
(
int
i=1;i<6;i++){
cin>>x[i];
if
(x[i]<40){
x[i]=40;
}
sum=sum+x[i];
}
cout<<sum/5<<endl;
return
0;
}
先程より大きく減ったと思います.改行とコメントを無くし,なるべく小さく纏め上げました.
最後
#include<iostream>
using
namespace
std;
int
main(){
int
i,s,x;
for
(i=1;i<6;i++){
cin>>x;
if
(x<40) x=40;
s=s+x;
}
cout<<s/5<<endl;
}
これが僕の限界でした.別に戻り値はいらないのでreturn文を消して,ifも真の時の実行文が1つしかないので1行だけにし,配列をつぶしました.それと,変数を一文字にして宣言をまとめた…というところです.
感想
まず,コードを書くのが難しいと分かりました.ジャッジは普段どおりAOJで提出していたのですが,何回かTLEに悩まされました.最後のコードは特に,for文の条件をミスしていただけでTLEになっていた事が分かった時は,本当に情けなく思いました.もう少し細部に気を付けます.
今回試してみたのはこの問題だけですが,暇(とやる気)が出来たらほかの問題でもやってみたいと思います.