Saturday, March 26, 2011

projecteuler.net and C++ meta-programming

I was introduced to projecteuler.net at a recent Guelph Coffee & Code meeting. The concept's quite simple: math problems of increasing difficulty to be solved using your programming language of choice. Sounds fun, no? We had a look at the first problem on the list:
Add all the natural numbers below one thousand that are multiples of 3 or 5.

On the walk home, I found myself thinking about the problem and I wondered if it would be possible to use C++ template meta-programming to obtain the solution at compile time. Here's what I came up with:


template< int n >
struct sum_integers_up_to
{
static const int result =
(n * (n + 1)) / 2;
};

template< int upper_limit, int x >
struct sum_multiples
{
static const int result =
x * sum_integers_up_to< (upper_limit - 1)/ x >::result;
};

template< int upper_limit, int x, int y >
struct sum_two_multiples
{
static const int sum_of_multiples_of_x =
sum_multiples< upper_limit, x >::result;
static const int sum_of_multiples_of_y =
sum_multiples< upper_limit, y >::result;
static const int sum_of_multiples_of_xy =
sum_multiples< upper_limit, x*y >::result;

static const int result =
sum_of_multiples_of_x + sum_of_multiples_of_y - sum_of_multiples_of_xy;
};

int main()
{
return sum_two_multiples< 1000, 3, 5 >::result;
}

Having a look at the assembly code generated by MSVC, we see that it's about as minimal as it gets (spoiler alert!):

_main PROC
mov eax, 233168
ret 0
_main ENDP

One down, 328 to go...

2 comments:

Anonymous said...

Whether you need to guess on esports events held in Seoul, soccer fixtures within the K League or the most recent recreation within the KBO League, this page incorporates a list of the most effective Korean 코인카지노 betting sites assist you|that will help you|that can assist you} get began. The South Korean police uncovered unlawful on-line gambling operations, which have been operating four gambling web sites since 2018. Poker followers are additionally not left behind with webcam know-how, they can additionally play stay poker on the consolation of their home.

7o23a0a4ex said...

Unlike sports activities betting, on-line on line casino playing remained unlawful in Illinois, and Jason wasn’t sure if the online video games he was taking part in} had been legal or not. “But there was never any red tape to get past in order to to} play those video games,” he said. In mixture with different parts of playing, such because the potential of profitable, the enjoyment of taking part in} and the social participation of the experience, dopamine triggers the brain’s reward system. In some people, this reward system could compel them 원 엑스 벳 to keep betting beyond their meant limits to experience those constructive emotions.

Post a Comment