綾小路龍之介の素人思考

[perl] Fizz Bizz 問題(ルックアップテーブル)

ある数が3の倍数のときFizz、また5の倍数のときBizz、どちらでもない場合その数を出力する課題。perlを使って回答。ルックアップテーブルを使う。結局この問題は中途半端(3と5の倍数)な素数判定問題。だからエラトステネスの篩で3と5の倍数だけ塗りつぶせばいい。塗りつぶした内容がルックアップテーブルになっている。

1行スクリプトでの結果が以下。

$ time perl -le 'for(1..10000000){$s="";$s.="Fizz" if !($_%3);$s.="Bizz" if !($_%5);$s=$_ if !$s;print $s}' | tail
9999991
9999992
Fizz
9999994
Bizz
Fizz
9999997
9999998
Fizz
Bizz

real    0m18.600s
user    0m18.269s
sys     0m0.252s

ルックアップテーブルを使った場合の結果が以下。ルックアップテーブルのおかげで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..10000000) {
        my $s = $s[$_ % 15];
        print $s?$s:$n;
        $n++;
}
$ time perl fizz_buzz.pl | tail
9999991
9999992
Fizz
9999994
Buzz
Fizz
9999997
9999998
Fizz
Buzz

real    0m25.117s
user    0m24.918s
sys     0m0.196s

リファレンス

  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-15T15:20:02+09:00
  2. Modified: 2009-07-15T15:20:02+09:00
  3. Generated: 2017-10-05T23:09:19+09:00