(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]))