Skip to content

Instantly share code, notes, and snippets.

@halfprogrammer
Created September 10, 2011 02:44
Show Gist options
  • Save halfprogrammer/1207863 to your computer and use it in GitHub Desktop.
Save halfprogrammer/1207863 to your computer and use it in GitHub Desktop.
4clojure
(defn find-coll [max-sum acoll]
(if (empty? acoll)
[() max-sum]
(loop [max-sum max-sum
cur ()
coll acoll]
(cond (< max-sum 0) [(list* cur) -1]
(nil? (seq coll)) [(list* cur) max-sum]
(and (number? (first coll)) (> (first coll) max-sum)) [(concat () cur) -1]
(number? (first coll)) (recur (- max-sum (first coll))
(concat cur (list (first coll)))
(rest coll))
:else (let [[cur-coll remaining] (find-coll max-sum
(first coll))]
(cond (>= remaining 0) (recur remaining
(concat cur (list cur-coll))
(rest coll))
(empty? cur-coll) [cur -1]
:else [(concat cur (list cur-coll)) remaining]))))))
(defn find-tree [max-sum coll]
(first (find-coll max-sum coll)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment