This post is intended to be different than my usual posts, and it’s meant to show that a person should also have fun with programming.

So recently while my girlfriend was reading the newspaper, she came across with a challenge that had the following premise:

``````Pick 3 numbers from the following image whose total must be equal to 306
``````

Ok, so I thought. It’s been a while since I’ve ran the python cli and just mess with the interpreter to find out things quickly (I love python for this sort of stuff :D )

So, the answer to the above example is clearly based on the sum of permutations of choosing 3 numbers.

By using python 3 itertools, we may use it to create a generator containing all permutations of a given R (size).

The function signature we are looking for in itertools is as follows:

``````itertools.permutations(List, R)
``````

So let’s start by setting the values above to a list:

``````ls = [58, 48, 80, 27, 144, 67, 154, 38, 79, 34, 83, 121, 36, 172, 99, 73]
``````

Ok, so now let’s create all the permutations in it:

``````permutations_generator = itertools.permutations(ls, 3)
``````

Ok, so we need to iterate for all elements and find out their sum.

List object is perfect for this, and its easy to cast the values to list.

``````permutations_list = list(permutations_generator)
``````

So, now all we need to do is iterate all elements and just use the function sum on each of the permutations we generated before.

``````for el in permutations_list:
if(sum(el) == 306):
print(el)
``````

And by running this through our interpreter in the command line we should get the following:

``````(144, 79, 83)
(144, 83, 79)
(154, 79, 73)
(154, 73, 79)
(79, 144, 83)
(79, 154, 73)
(79, 83, 144)
(79, 73, 154)
(83, 144, 79)
(83, 79, 144)
(73, 154, 79)
(73, 79, 154)
``````

And that’s it, out of curiosity, if you do this by hand, without optimizing our permutations to sets for instance (we are not going for optimization for such a small set) you would end up with:

``````>>>len(permutations_list)
3360
``````

That’s a lot of number crunching to be done by hand :D

And that’s it. Hope on that side you also like to solve this small things using your language of choice.