kotonoha_pcg@気ままに雑記

kotonoha_pcgが気分次第で様々書き置きます.dlang関係他:http://kotonoha-pcg.hatenadiary.com

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になっていた事が分かった時は,本当に情けなく思いました.もう少し細部に気を付けます.

 今回試してみたのはこの問題だけですが,暇(とやる気)が出来たらほかの問題でもやってみたいと思います.