From db8b53504733bdc70decb7263387eb33b0cde60a Mon Sep 17 00:00:00 2001 From: Vahagn Khachatryan Date: Tue, 5 Jun 2018 09:53:58 -0400 Subject: [PATCH] compile_time_power_of_number.cpp --- .../training/compile_time_power_of_number.cpp | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 puzzles/interviews/training/compile_time_power_of_number.cpp diff --git a/puzzles/interviews/training/compile_time_power_of_number.cpp b/puzzles/interviews/training/compile_time_power_of_number.cpp new file mode 100644 index 0000000..1617f1a --- /dev/null +++ b/puzzles/interviews/training/compile_time_power_of_number.cpp @@ -0,0 +1,89 @@ +/* +VIM: let b:lcppflags="-std=c++14 -O2 -pthread -I." +VIM: let b:wcppflags="/O2 /EHsc /DWIN32" +VIM-: let b:cppflags=g:Iboost.g:Itbb +VIM-: let b:ldflags=g:Lboost.g:Ltbb +VIM-: let b:ldlibpath=g:Bboost.g:Btbb +VIM-: let b:argv="" +*/ +#include +#include +#include + + +template +struct power_of +{ + enum { + value = power_of<(N+1)/2>::value * 2 + }; +}; + +template <> +struct power_of<2> +{ + enum { + value = 2 + }; +}; + +template <> +struct power_of<1> +{ + enum { + value = 1 + }; +}; + +template <> +struct power_of<0> +{ + enum { + value = 0 + }; +}; + +template +void test() +{ + std::cout << N << "=> " << power_of::value <(); + test<1>(); + test<2>(); + test<3>(); + test<4>(); + test<5>(); + test<6>(); + test<7>(); + test<8>(); + test<9>(); + test<127>(); + test<128>(); + test<129>(); + //...... + + auto end = std::chrono::high_resolution_clock::now(); + std::chrono::duration seconds = end - begin; + std::cout << "Time: " << seconds.count() << std::endl; + return 0; +} +catch ( const std::exception& e ) +{ + std::cerr << std::endl + << "std::exception(\"" << e.what() << "\")." << std::endl; + return 2; +} +catch ( ... ) +{ + std::cerr << std::endl + << "unknown exception." << std::endl; + return 1; +}} +