綾小路龍之介の素人思考

[perl] Fizz Bizz 問題(mod計算無し)

ある数が3の倍数のときFizz、また5の倍数のときBizz、どちらでもない場合その数を出力する課題。perlを使って回答。ルックアップテーブルと2重ループでmod計算を無くす。

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

結局シンプルな計算が一番ってことですか?

リファレンス

  1. anarchy golf - FizzBuzz
  2. fizz buzz - Google 検索
  3. Fizz Buzz - Wikipedia
  4. どうしてプログラマに・・・プログラムが書けないのか?
  5. ここギコ!: FizzBuzz問題
  6. Using FizzBuzz to Find Developers who Grok Coding « Imran On Tech

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2009-07-16T15:19:26+09:00
  2. Modified: 2009-07-16T15:19:26+09:00
  3. Generated: 2018-08-11T23:09:12+09:00