Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defrecord Kid [name family-name grandfather-surname])
- (def kids [
- (Kid. "Alyssa" "Dufair-McKenna" "Dunne")
- (Kid. "Joe" "Dufair-McKenna" "Dunne")
- (Kid. "Rose" "Dufair-McKenna" "Dunne")
- (Kid. "Ian" "Dufair-McKenna" "Dunne")
- (Kid. "Emma" "Dufair-McKenna" "Dunne")
- (Kid. "Jory" "Cook" "Cook")
- (Kid. "Kaitlin" "Dunne" "Dunne")
- (Kid. "Riley" "Dunne" "Dunne")
- (Kid. "Derek" "Cajina" "Rust")
- (Kid. "Cassie" "Carpentier" "Rust")
- (Kid. "Trevor" "Carpentier" "Rust")])
- (defn is-sibling? [kid1 kid2]
- (= (:family-name kid1) (:family-name kid2)))
- (defn from-same-grandfather? [kid1 kid2]
- (= (:grandfather-surname kid1) (:grandfather-surname kid2)))
- (defn is-rust-cousin? [kid1 kid2]
- (and (= (:grandfather-surname kid1) "Rust")
- (= (:grandfather-surname kid2) "Rust")))
- (defn meets-all-constraints? [kid1 kid2]
- (and (not (is-sibling? kid1 kid2))
- (not (is-rust-cousin? kid1 kid2))))
- (defn get-constrained-match [kid1 kids]
- (let [kid2 (rand-nth kids)]
- (if (meets-all-constraints? kid1 kid2)
- kid2
- (get-constrained-match kid1 kids))))
- (defn get-constrained-map [kids1 kids2]
- (if (> (count kids1) 0)
- (let [kid2 (get-constrained-match (first kids1) kids2)]
- (cons [(first kids1) kid2] (get-constrained-map (rest kids1) (remove #{kid2} kids2))))))
- (defn formatted-constrained-map [kids1 kids2]
- (map (fn [pair] (format "%s -> %s" (:name (first pair)) (:name (second pair)))) (get-constrained-map kids1 kids2)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement