逆FizzBuzz問題 (Inverse FizzBuzz) - 猫とC#について書くmatarilloの雑記逆FizzBuzzって、オートマトンなので正規表現を使うと楽に出来るはず。
逆FizzBuzz問題 (Inverse FizzBuzz) General | Inverse Fizzbuzz - just another scala quant を日本語にしました。 ちなみに...
http://d.hatena.ne.jp/matarillo/20120515/p1
#!perl追記
use strict;
use warnings;
use Test::More;
sub inv_fizzbuzz {
my ($fz, $n, $pat) = ('', 1, join ',*?', @_);
while (1) {
$fz .= $n % 15 > 0 ?
$n % 3 > 0 ?
$n % 5 > 0 ?
',': 'buzz,': 'fizz,': 'fizzbuzz,';
if ($fz =~ /($pat)/) {
my $rhs = $1;
my $lhs = substr($fz, 0, index($fz, $rhs) + 1);
$lhs =~ s/(fizz|buzz)//g;
$rhs =~ s/(fizz|buzz)//g;
$lhs = length($lhs);
$rhs = $lhs + length($rhs||'');
return [$lhs, $rhs];
}
$n++;
}
}
is_deeply(inv_fizzbuzz('fizz'), [3, 3]);
is_deeply(inv_fizzbuzz('buzz'), [5, 5]);
is_deeply(inv_fizzbuzz('fizz', 'buzz'), [3, 5]);
is_deeply(inv_fizzbuzz('buzz', 'fizz'), [5, 6]);
is_deeply(inv_fizzbuzz('fizz', 'fizz', 'buzz'), [6, 10]);
is_deeply(inv_fizzbuzz('fizz', 'fizz'), [6, 9]);
is_deeply(inv_fizzbuzz('fizz', 'buzz', 'fizz'), [3, 6]);
is_deeply(inv_fizzbuzz('fizzbuzz', 'fizz'), [15, 18]);
done_testing;
Vimだとこうか?
function! s:inv_fizzbuzz(...)
let [fz, n, p] = ['', 1, join(a:000, ',\{-}')]
while 1
let fz .= n%15>0?n%3>0?n%5>0?",": "buzz,": "fizz,": "fizzbuzz,"
let m = matchstr(fz, p)
if len(m) > 0
let lhs = len(split(fz[:stridx(fz, m)-1], ',', 1))
return [lhs, lhs + len(split(m, ',', 1))-1]
endif
let n += 1
endwhile
endfunction
「お前それ、シナチクって言いたかっただけやろ」



![Validate my RSS feed [Valid RSS]](http://mattn.kaoriya.net/images/valid-rss-rogers.png)

