1行スクリプトでの結果が以下。
$ time perl -le 'for(1..1500014){$s="";$s.="Fizz" if !($_%3);$s.="Bizz" if !($_%5);$s=$_ if !$s;print $s}' | tail
Bizz
Fizz
1500007
1500008
Fizz
Bizz
1500011
Fizz
1500013
1500014
real 0m2.844s
user 0m2.812s
sys 0m0.028s
ルックアップテーブルと二重ループを使った場合の結果が以下。mod計算はなくなったけど、総時間は増えている。
$ cat fizz_buzz.pl
#!/usr/bin/perl -l
use strict;
use warnings;
my @s = ('FizzBizz', '', '', 'Fizz', '', 'Buzz', 'Fizz', '', '', 'Fizz', 'Buzz', '', 'Fizz', '', '', '');
my $n = 0;
for (0..100000) {
for (0..14) {
my $s = $s[$_];
print $s?$s:$n;
$n++;
}
}
$ time perl fizz_buzz.pl | tail
Buzz
Fizz
1500007
1500008
Fizz
Buzz
1500011
Fizz
1500013
1500014
real 0m3.634s
user 0m3.588s
sys 0m0.044s
結局シンプルな計算が一番ってことですか?