トップ «前の日記(2013-01-27(Sun)) 最新 次の日記(2013-01-31(Thu))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2013-01-30(Wed) 昨日から若干温度高め

かなりおバカなfizzbuzz

例によって1から100まで。
流石に全部printf("1\n2\nfizz\n...98n\fizz\nbuzz\n") ではないが、それに近いのをCで。

#include<stdio.h>
int main()
{
  int i;  
  #define LIMIT 100
  for(i=0; i<LIMIT; i+=15) {
    printf("%d\n", i+1);
    printf("%d\n", i+2);
    printf("fizz\n");
    printf("%d\n", i+4);
    printf("buzz\n");
    printf("fizz\n");
    printf("%d\n", i+7);
    printf("%d\n", i+8);
    printf("fizz\n");
    printf("buzz\n");
    if(i+15 > LIMIT) {
     break;  
    }
    printf("%d\n", i+11);
    printf("fizz\n");
    printf("%d\n", i+13);
    printf("%d\n", i+14);
    printf("fizzbuzz\n");
  }
  return 0;
}

次項を書いたとき、少しだけ書き直している。

速度比較してみた

さっきのfizzbuzzを100000000回まで増やしたバージョンを作成し、 ノーマルなfizzbuzz(下記)と、Raspbian上で比較してみた。
結果(ざっと701MB)が同一になるらしいことは sha1sum(1) で確認している。

#include<stdio.h>
int main()
{
  int x;
  for(x=1; x <= 100000000; x++) {
    if(! (x%3)) printf("fizz");
    if(! (x%5)) printf("buzz");
    if(x%3 &&  x%5) printf("%d", x);
    printf("\n");
  }
  return 0;
}
$ time ./normal_fizzbuzz > /dev/null
 
real3m28.469s
user3m27.920s
sys0m0.300s
 
real3m28.469s
$ time ./fifi_fizzbuzz > /dev/null
 
real2m35.261s
user2m34.840s
sys0m0.200s

75%くらい高速になったみたい。ちなみにx86_64のUbuntu(Core i5) でも9秒弱に6秒強で、傾向としてほぼ同じ。
gcc でコンパイルオプションを -O3 など付けてみたが、いずれも有意差なしだった。


リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。