I am working on the following problem:

   Find the only Pythagorean triplet, {a, b, c}, for which a + b + c =
1000

My strategy is to produce a series of triplets of a^2 + b^2 and then
filter out the ones where the c^2 is a perfect square, in order to
determine Pythagorean triplets.

I wrote a function to produce triplets that takes a range as input:


(use '[clojure.contrib.math :only (sqrt)])

(defn trips [coll]
  (loop [a (first coll) b (rest coll) trip []]
    (cond (seq b)
          (recur (first b) (rest b) (conj  trip (map #(vector a % (sqrt (+ (*
a a) (* % %)))) b)))
          true trip)))


,so if I want to see all triplets over the range of 1-7, I just do:

(trips (range 1 7)),   which yields the following;

[([1 2 2.23606797749979] [1 3 3.1622776601683795] [1 4
4.123105625617661] [1 5 5.0990195135927845] [1 6 6.082762530298219])
([2 3 3.605551275463989] [2 4 4.47213595499958] [2 5
5.385164807134504] [2 6 6.324555320336759]) ([3 4 5] [3 5
5.830951894845301] [3 6 6.708203932499369]) ([4 5 6.4031242374328485]
[4 6 7.211102550927978]) ([5 6 7.810249675906654])]

Obviously the only Pythagorean triplet burried in there is 3, 4, 5.

Now, I can easily test a single vector for integers as follows:

  (map integer? [5 6 7])

However, the output of my trips function yields multiple collections
of vectors inside of a larger vector.  I am completely befuddled as to
how to process this behemoth.

I guess I need to use some functions for merging collections?

Any help apprectiated.  thanks!!

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to