Most of my 4clojure solution.