Boost.PP で、FizzBuzz をやってみた
とりあえず、何も考えずにベタ書き。
[ソース]
#include <boost/preprocessor/if.hpp> #include <boost/preprocessor/cat.hpp> #include <boost/preprocessor/comparison/equal.hpp> #include <boost/preprocessor/logical/and.hpp> #include <boost/preprocessor/arithmetic/mod.hpp> #include <boost/preprocessor/enum_shifted.hpp> #define FIZZ_BUZZ(z, n, d) \ BOOST_PP_IF( \ BOOST_PP_AND( \ BOOST_PP_EQUAL(BOOST_PP_MOD(n, 3), 0), \ BOOST_PP_EQUAL(BOOST_PP_MOD(n, 5), 0) \ ), \ BOOST_PP_CAT(fizz, buzz), \ BOOST_PP_IF( \ BOOST_PP_EQUAL( BOOST_PP_MOD(n,3), 0), \ fizz, \ BOOST_PP_IF( \ BOOST_PP_EQUAL( BOOST_PP_MOD(n,5), 0), \ buzz, \ n \ ) \ ) \ ) BOOST_PP_ENUM_SHIFTED(50, FIZZ_BUZZ, ~) #undef FIZZ_BUZZ
[出力]
1 , 2 , fizz , 4 , buzz , fizz , 7 , 8 , fizz , buzz , 11 , fizz , 13 , 14 , fizzbuzz , 16 , 17 , fizz , 19 , buzz , fizz , 22 , 23 , fizz , buzz , 26 , fizz , 28 , 29 , fizzbuzz , 31 , 32 , fizz , 34 , buzz , fizz , 37 , 38 , fizz , buzz , 41 , fizz , 43 , 44 , fizzbuzz , 46 , 47 , fizz , 49
Boost.PP 楽しいなー(白目。