正規表現で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])$