;;; defines a map of people and their friends
(def FRIENDS '{:amy #{:bob :dan :elle}
               :bob #{:amy :dan}
               :chaz #{:dan :elle}
               :dan #{:chaz}
               :elle #{:amy :bob :chaz :dan}
               :fred #{:dan}})

;;; gets the direct friends of a person
(defn get-friends [person]
  (get FRIENDS person))

;;; gets a circle of friends of the specified level
(defn get-circle [person N]
  (if (= N 1)
    (get-friends person)
    (let [circle (get-circle person (dec N))]
      (clojure.set/difference (clojure.set/union circle (apply clojure.set/union (map get-friends circle))) #{person}))))