(defn best [f coll] (if (seq coll) (reduce #(if (f %1 %2) %1 %2) coll) nil)) (defn most [f coll] (if (seq coll) (reduce (fn [[wins wins-score] x] (let [x-score (f x)] (if (> wins-score x-score) [wins wins-score] [x x-score]))) [(first coll) (f (first coll))] (rest coll)) [nil nil]))