(defn proc-seq [limit arg] (drop-while #(< % limit) arg)) (defn all-same? [xs] (let [f #(= % (first xs))] (every? f xs))) (defn solve [& args] (loop [seqs args] (let [firsts (map first seqs)] (if (all-same? firsts) (first firsts) (recur (map (partial proc-seq (reduce max firsts)) seqs))))))