On Dec 27, 9:48 pm, rgalgon <[EMAIL PROTECTED]> wrote: > I'm new to Python and have been putting my mind to learning it over my > holiday break. I've been looking over the functional programming > aspects of Python and I'm stuck trying to come up with some concise > code to find Taxicab numbers (http://mathworld.wolfram.com/ > TaxicabNumber.html). > > "Taxicab(n), is defined as the smallest number that can be expressed > as a sum of two positive cubes in n distinct ways" > > In Haskell something like this could easily be done with: > cube x = x * x * x > > taxicab n = [(cube a + cube b, (a, b), (c, d)) > | a <- [1..n], > b <- [(a+1)..n], > c <- [(a+1)..n], > d <- [(c+1)..n], > (cube a + cube b) == (cube c + cube d)] > > Output:: > *Main> taxicab 10 > [] > *Main> taxicab 12 > [(1729,(1,12),(9,10))] > *Main> taxicab 20 > [(1729,(1,12),(9,10)),(4104,(2,16),(9,15))] > > I'm looking for a succinct way of doing this in Python. I've been > toying around with filter(),map(), and reduce() but haven't gotten > anything half-way decent yet. > > So, how would you implement this taxicab(n) function in Python? > Thanks in advance :-)
Python's list comprehensions are quite similar to haskell's, so this code can be translated almost word-for-word. def cube(x): return x * x * x def taxicab(n): return [(cube(a) + cube(b), (a, b), (c, d)) for a in range(1, n + 1) for b in range(a + 1, n + 1) for c in range(a + 1, n + 1) for d in range(c + 1, n + 1) if cube(a) + cube(b) == cube(c) + cube(d)] for n in (10, 12, 20): print list(taxicab(n)) -- Paul Hankin -- http://mail.python.org/mailman/listinfo/python-list