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[0] + 13 * x[1] / x[2] + x[3] + 12 * x[4] - x[5] - 11 + x[6] * x[7] / x[8] - 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.