# Problem 9

In this post I will show how did I solve the 9th problem of the Euler project. This was one of the first problems that gave me performance issues and therefore a brute force approach was not good enough. However, I just realised that after building a brute force algorithm 🙂

I started describing all the conditions stated in the description of the problem. Therefore, I got this Haskell function:

l = [ [a,b,c] | a <- [1..999], b <- [1..999], c <- [1..999], a+b+c== 1000 && a^2 + b^2 == c^2 && a < b && b < c]

Then, with a simple function called *value:*

value = product . head

By executing *value l*, I reached the following result: (371.90 secs, 32855979636 bytes)

As you can see, it is not an interesting result for such a problem. I was just making too many combinations of *a*, *b* and *c*, and most of the conditions were unnecessary. From the problem description, it is possible to deduct that *c* can be written by means of *a* and *b*. Using this simple substitution and removing the unnecessary conditions, I reached this solution:

h = [[a,b,1000*–*a*–*b] | a <- [1..999], b <- [1..999],a^2 + b^2 == (1000*–*a*–*b)^2]

After running *value h*, this was the result: (0.79 secs, 108452856 bytes), which is much better than the first one.