学食大人買い計算器バージョン2(毒舌アルゴリズム版)
2006年3月29日
先日作ってみた、1億円あればおつりをもらうことなく日替わり定食とうどんを食べられる組み合わせの全てと、その件数を算出するバカプログラム。
その総数を求めるのに42分かかった事を書いたが、昨日、毒舌紳士の某氏がVBスクリプトで同じ機能を持つコードを書いてくれたので、それを実行してみたところ、なんと1秒から2秒の間で終わってしまった。orz
某氏なら1秒ほどで終わるところを俺は42分かかっていたわけで、土偶コードのアルゴリズムの馬鹿さ加減がこれほどまでとは正直思わなかった…
そういうわけで余りにも悔し情けなくあり、もう一度書き直してみた。
アルゴリズムを大幅に変更。というか某氏と殆ど同じ、限りなく「毒舌紳士からパクった」に近い「毒舌アルゴリズム」採用である。
標準出力に出すとそこがボトルネックになるので、ファイルに出力するようにしてみた。
で、
cc -native -xO5 otonagai.c で生成されたa.out に対する、
time ./a.out の結果、
real 0m0.063s
user 0m0.045s
sys 0m0.017s
1000分の63秒。前に42分かかっていた事を考えればたいした進歩やと。
しかし同じ機能を持つプログラムでも作り方一つでここまで違うとはびっくりやね。
次はスケールを大きくして、日本の国家予算で「チロルチョコ」と「うまい棒」が幾つ買え、それらを全国民に配ると幾つずつ行き渡るのか、を計算するプログラムを書いてみようかと思ったけど、スケールが大きくなればなるほどアルゴリズム以前にバカバカしさが目に付くので止めておこう…
以下はソース
#include < stdio.h >
int main(){
int mo,x,c=0;
FILE *fp;
fp = fopen(“otonagai.list”, “w”);
mo=100000000;
for(x=0; x<mo/350 ; x++){
if((mo-350*x)%60==0){
fprintf(fp,”日替わり定食=%d&セットnbsp;うどん=%d杯 \n”,x,(mo-350*x)/60);
c++;
}
}
if(c==0){
printf(“can’t bye\n”);
}
else{
printf(“%d 通りの大人買いが出来ます。\n”
“総一覧はカレントディレクトリのotonagai.listに出力しました。\n”,c);
}
return 0;
int main(){
int mo,x,c=0;
FILE *fp;
fp = fopen(“otonagai.list”, “w”);
mo=100000000;
for(x=0; x<mo/350 ; x++){
if((mo-350*x)%60==0){
fprintf(fp,”日替わり定食=%d&セットnbsp;うどん=%d杯 \n”,x,(mo-350*x)/60);
c++;
}
}
if(c==0){
printf(“can’t bye\n”);
}
else{
printf(“%d 通りの大人買いが出来ます。\n”
“総一覧はカレントディレクトリのotonagai.listに出力しました。\n”,c);
}
return 0;