C++ で FibBuzz
震源地: Codnote.net
やりましょう.
fibbuzz.cpp
#if !defined(BOOST_PP_IS_ITERATING) #include <boost/preprocessor/iteration/iterate.hpp> #include <boost/preprocessor/slot/slot.hpp> #define BOOST_PP_VALUE 1 #include BOOST_PP_ASSIGN_SLOT(1) #define BOOST_PP_VALUE 1 #include BOOST_PP_ASSIGN_SLOT(2) #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 29, "fibbuzz.cpp")) #include BOOST_PP_ITERATE() #else #if BOOST_PP_SLOT(1) % 15 == 0 FizzBuzz #elif BOOST_PP_SLOT(1) % 3 == 0 Fizz #elif BOOST_PP_SLOT(1) % 5 == 0 Buzz #else BOOST_PP_SLOT(1) #endif #define BOOST_PP_VALUE BOOST_PP_SLOT(1) #include BOOST_PP_ASSIGN_SLOT(3) #define BOOST_PP_VALUE BOOST_PP_SLOT(2) #include BOOST_PP_ASSIGN_SLOT(1) #define BOOST_PP_VALUE BOOST_PP_SLOT(3) + BOOST_PP_SLOT(2) #include BOOST_PP_ASSIGN_SLOT(2) #endif
実行
$ g++ -E -P -I $BOOST_ROOT -I . fibbuzz.cpp 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 Buzz
VC や Clang でも動くと思いますが,空白行だらけになってしまうので GCC で実行するのがいいと思います.