C++ で FibBuzz
元ネタ:FizzBuzz は時代遅れらしいので FibBuzz はどうでしょう #fibbuzz - cod.note
C++ で書いてみた。
[ソース]
#include <boost/lambda/lambda.hpp> #include <boost/lambda/bind.hpp> #include <boost/range/irange.hpp> #include <boost/range/algorithm/for_each.hpp> #include <boost/range/adaptor/transformed.hpp> #include <boost/lexical_cast.hpp> unsigned long int fibonacci(unsigned long int n){ return n == 0 ? 0 : n == 1 ? 1 : fibonacci(n - 1) + fibonacci(n - 2); } std::string fizz_buzz(unsigned long int n){ return n % 15 == 0 ? "FizzBuzz" : n % 3 == 0 ? "Fizz" : n % 5 == 0 ? "Buzz" : boost::lexical_cast<std::string>(n); } int main(){ namespace lambda = boost::lambda; using lambda::_1; using boost::adaptors::transformed; int size = 30; boost::for_each( boost::irange(1, size) |transformed(lambda::bind(fibonacci, _1)) |transformed(lambda::bind(fizz_buzz, _1)), std::cout << _1 << ", " ); return 0; }
[出力]
1, 1, 2, Fizz, Buzz, 8, 13, Fizz, 34, Buzz, 89, Fizz, 233, 377, Buzz, Fizz, 1597, 2584, 4181, FizzBuzz, 10946, 17711, 28657, Fizz, Buzz, 121393, 196418, Fizz, 514229,
うーん、さっぱりし過ぎてなんかつまらないですね。
もうちょっと何かしたい。
あとメモ化していないので、サイズを大きくすると遅いです。