I didn’t feel right letting the week go by with no solutions posted, so I rigged one up for problem 9 (find the unique Pythagorean triple which sums to 1000). To generate Pythagorean triples, I used what is identified as Euclid’s Formula on the Wikipedia page for Pythagorean triples. After a little while, I decided the appropriate generalization of this problem was to take in any number, and find all of the Pythagorean triples that sum to the given number. Here’s what I came up with:

import sys
goal = len(sys.argv) >= 2 and int(sys.argv[1]) or 1000
answers = []
for n in xrange(1,goal):
for m in xrange(n+1,goal,2):
a,b = 2*m*n,m*m-n*n
trip = (min(a,b),max(a,b),m*m+n*n)
s = sum(trip)
if(goal % s == 0):
k = goal // s
trip = map(lambda x:k*x,trip)
if not (trip in answers):
answers.append(trip)

I’m fairly certain that the loops could be cut down in size, but I’m a bit tired right now to see exactly how far. I increment by 2 because it keeps the parity of and different, which Wikipedia claims is a requirement to generate a “primitive” triple.

I keep hoping to find a function that will take a list, and return just the unique objects from that list, but have yet to run across it. It’d just about work to make a set of the objects, but apparently “list objects are unhashable”, and so doing sets of tuples doesn’t go like I expect it to. Probably because I haven’t read enough, or thought quite enough about what is going on. Maybe one of these days I’ll get it.

### Like this:

Like Loading...

*Related*

Tags: nah, prob9, python

This entry was posted on June 12, 2009 at 11:35 pm and is filed under Uncategorized. You can follow any responses to this entry through the RSS 2.0 feed.
You can leave a response, or trackback from your own site.

June 26, 2009 at 11:26 pm |

[…] the reading. I mentioned that I had just used the results about all the Pythagorean triples to solve a Project Euler […]