I’m quite liking the puzzles coming out of Alex Bellos’s Adventures in Numberland. This week’s challenge: Can you do the maths puzzle for Vietnamese eight-year-olds that has stumped parents and teachers?
You have a simple arithmetic equation and you have to place the digits from one to 9 in the grid so that the result is 66. And I thought that sounded pretty easy – there are only 362880 possible combinations, I just need a trial and error method to work through the combinations until I find the right one.
Thank you Python.
Firstly, a function to yield all the possible permutations in a list
def yield_permutations(the_list): """ Yields all permutations for a list """ length = len(the_list) if length <= 1: yield the_list else: for i in range(0, length): for j in yield_permutations(the_list[:i] + the_list[i+1:]): yield [the_list[i]] + j
And then I just need to plug the values into the formula
digits =  for i in range(1, 10): digits.append(i) for x in yield_permutations(digits): result = x + 13 * x / x + x + 12 * x - x - 11 + x * x / x - 10 print(x, result) if result == 66: break
I’m sure there is a more elegant way of doing this, but after checking my result by hand, I can confirm that this approach also works.