僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
例によって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や内容が変った場合はあしからず。