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:
1
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:
1
itertools.permutations(List, R)
So let’s start by setting the values above to a list:
1
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:
1
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.
1
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.
1
2
3
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:
1
2
3
4
5
6
7
8
9
10
11
12
(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:
1
2
>>>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.