#153
Pairwise Disjoint Sets
 

Difficulty:Easy
Topics:set-theory


Given a set of sets, create a function which returns true if no two of those sets have any elements in common (1) and false otherwise. Some of the test cases are a bit tricky, so pay a little more attention to them. (1) Such sets are usually called pairwise disjoint or mutually disjoint.
test not run
(= (__ #{#{\U} #{\s} #{\e \R \E} #{\P \L} #{\.}})
                       true)
test not run
(= (__ #{#{:a :b :c :d :e}
                             #{:a :b :c :d}
                             #{:a :b :c}
                             #{:a :b}
                             #{:a}})
                       false)
test not run
(= (__ #{#{[1 2 3] [4 5]}
                             #{[1 2] [3 4 5]}
                             #{[1] [2] 3 4 5}
                             #{1 2 [3 4] [5]}})
                       true)
test not run
(= (__ #{#{'a 'b}
                             #{'c 'd 'e}
                             #{'f 'g 'h 'i}
                             #{''a ''c ''f}})
                       true)
test not run
(= (__ #{#{'(:x :y :z) '(:x :y) '(:z) '()}
                             #{#{:x :y :z} #{:x :y} #{:z} #{}}
                             #{'[:x :y :z] [:x :y] [:z] [] {}}})
                       false)
test not run
(= (__ #{#{(= "true") false}
                             #{:yes :no}
                             #{(class 1) 0}
                             #{(symbol "true") 'false}
                             #{(keyword "yes") ::no}
                             #{(class '1) (int \0)}})
                       false)
test not run
(= (__ (set [(set [distinct?])
                                 (set [#(-> %) #(-> %)])
                                 (set [#(-> %) #(-> %) #(-> %)])
                                 (set [#(-> %) #(-> %) #(-> %)])]))
                       true)
test not run
(= (__ #{#{(#(-> *)) + (quote mapcat) #_ nil}
                             #{'+ '* mapcat (comment mapcat)}
                             #{(do) set contains? nil?}
                             #{, , , #_, , empty?}})
                       false)


Code which fills in the blank: