## Project Euler Problem #30

### February 14, 2010

Read the details of the problem here

**Summary**

Find the sum of all the numbers that can be written as the sum of fifth powers of their digits.

**Solution**

I used a straightforward brute force approach. The highest number that can be attained with these criteria is at most going to be a 6-digit number as 7*9^{5} = 413343 so that forms an upper bound for the search. The only real optimisation I made was pre-calculating the fifth powers.

def p5 = [:] 0.upto(9) { p5[it.toString()] = it ** 5 } def answer = (2..(6*p5["9"])).findAll { n-> n.toString().toList().sum { p5[it] } == n }.sum()

This ran in 12.41 seconds so just inside my 15 second constraint. A more procedural approach, using an integer array for holding the fifth powers and a numerical approach to extracting the digits ran in a little over 4 seconds.

**Conclusion**

Again, I may have used an overly Groovy approach to this and sacrified a lot in terms of efficiency for use of the listop features. You can see that in terms of time-to-solution for questions like this, Groovy scores very well, as long as runtime performance isn’t an issue.