正規表現でFizzBuzz

1,2,3,…,99,100 という文字列に対して正規表現でFizzBuzzに置換するような解法は..

1,2,3,…,99,100 という文字列に対して正規表現FizzBuzzに置換するような解法は出てないかなと思ったけど(出てたらごめんなさい><)、正規表現あんまり得意じゃないので私にはできません。

それはね、

use Perl6::Say;
use Regexp::Assemble;

my @list = (15,5,3);
my %ra = map { $_ => Regexp::Assemble->new } @list;

for my $i ( 1..100 ) {
    for( @list ) {
        ($i % $_) || $ra{$_}->add(qq/^$i\$/);
    }
}

my $re = sprintf "(?:%s)" ,join '|' , map { '('.$ra{$_}->re.')' } @list;

こうやってね、

$reに正規表現を作っておいて

say /$re/ ? $1 ? 'FizzBuzz' : $2 ? 'Buzz' : $3 ? 'Fizz' : '' : $_ for 1..100;

こうすれば、ね?簡単でしょ?(ボブ風)

P.S.

ちなみに正規表現はこんな感じになった↓

# 100までの15の倍数にマッチ
^(?:[147]5|[369]0)$

# 100までの5の倍数にマッチ
^(?:[2346789][05]|1(?:0?0|5)|5[05]?)$

# 100までの3の倍数にマッチ
^(?:[369][0369]?|[147][258]|[258][147])$