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:
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:
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.