こりずにfizzbuzz
sub create_fizzbuzz{ my ($p) = @_; my %count; my $n = 1; return sub{ my $str = ''; foreach my $k (sort keys %$p){ $count{$k}++; if ( $count{$k} < $k ){ $str .= ''; }else{ $str .= $p->{$k}; $count{$k} = 0; } } $str ||= $n; $n++; return $str; }; };
※ 昨晩思いついたものと同じく、配列用意してやってたけど、不要なので削除した
実行するとき
my $fizzbuzz = create_fizzbuzz({ 3=>'fizz', 5=>'buzz' }); for(my $i=0;$i<100;$i++){ print $fizzbuzz->()."\n"; }
2の倍数で「piyo」が増えたとき
my $fizzbuzz = create_fizzbuzz({ 3=>'fizz', 5=>'buzz', 2=>'piyo' }); for(my $i=0;$i<100;$i++){ print $fizzbuzz->()."\n"; }
※ buzzfizzと表示されるようだったので、ハッシュを数値=>文字列で作るよう変更