Next round of 4clojure.com solutions

After the sixth round, five more 4clojure.com solutions:

;;; Problem 55 - Count Occurrences
(deftest test-problem-55
  (let [v1 (fn [xs]
             (reduce (fn [a v] (assoc a v (inc (get a v 0)))) {} (vec xs)))
        __ v1]
    (is (= (__ [1 1 2 3 2 1 1]) {1 4, 2 2, 3 1}))
    (is (= (__ [:b :a :b :a :b]) {:a 2, :b 3}))
    (is (= (__ '([1 2] [1 3] [1 3])) {[1 2] 1, [1 3] 2}))))

 ;;; Problem 54 - Partition a Sequence
(deftest test-problem-54
  (let [v1 (fn [n xs]
             (loop [a [] r xs]
               (if (< (count r) n)
                 a
                 (recur (conj a (take n r)) (drop n r)))))
        __ v1]
    (is (= (__ 3 (range 9)) '((0 1 2) (3 4 5) (6 7 8))))
    (is (= (__ 2 (range 8)) '((0 1) (2 3) (4 5) (6 7))))
    (is (= (__ 3 (range 8)) '((0 1 2) (3 4 5))))))

 ;;; Problem 53 - Longest Increasing Sub-Seq
(deftest test-problem-53
  (let [subseqs #(take-while not-empty (iterate (partial rest) %))
        filter2 (fn [f xs]
                  (loop [ll (first xs) l [ll] [fr :as r] (rest xs)]
                    (if (or (nil? ll)
                            (nil? fr)
                            (not (f ll fr)))
                      l
              (recur fr (conj l fr) (rest r)))))
        do-run #(map (partial filter2 <) %)
        do-long (partial filter #(> (count %) 1))
        do-sort (partial sort-by #(-' (count %)))
        v1 #(-> % subseqs do-run do-long (conj []) do-sort first)
        __ v1]
    (is (= (__ [1 0 1 2 3 0 4 5]) [0 1 2 3]))
    (is (= (__ [5 6 1 3 2 7]) [5 6]))
    (is (= (__ [2 3 3 4 5]) [3 4 5]))
    (is (= (__ [7 6 5 4]) []))))

 ;;; Problem 52 - Intro to Destructuring
(deftest test-problem-52
  (is (= [2 4] (let [[a b c d e f g] (range)] ))))

 ;;; Problem 51 - Advanced Destructuring
(deftest test-problem-51
  (let [v1 [1 2 3 4 5]
        __ v1]
    (is (= [1 2 [3 4 5] [1 2 3 4 5]] (let [[a b & c :as d] __] [a b c d])))))

(run-tests)