(defn not-last-car [x]
"Given percent of reduction, get all the bears, apart from the ones that go to the last car"
(let [prog-mult (- 1 (/ x 100))
take-limit (- 1 prog-mult)]
(take-while #(> % take-limit) (iterate #(* % prog-mult) 1))))
(defn partition-bears [bears]
"Given a sequence of bears groups them by cars"
(loop [s bears
acc []]
(cond
(empty? s)
acc
(> 1 (+ (first s) (reduce + (peek acc))))
(recur
(rest s
) (conj (pop acc
) (conj (peek acc
) (first s
)))) :default
(recur
(rest s
) (conj acc
[(first s
)])))))
(defn solution [x]
(let [distribution (-> x not-last-car partition-bears)
size (count distribution)]
(println "Cars required" (inc size) "\n"
(apply str (map-indexed #(str (inc %1) ":" %2 "\n") distribution))
(str (inc size) ":all other bears"))))
(solution 10)
(solution 20)
KGRlZm4gbm90LWxhc3QtY2FyIFt4XQogICJHaXZlbiBwZXJjZW50IG9mIHJlZHVjdGlvbiwgZ2V0IGFsbCB0aGUgYmVhcnMsIGFwYXJ0IGZyb20gdGhlIG9uZXMgdGhhdCBnbyB0byB0aGUgbGFzdCBjYXIiCiAgKGxldCBbcHJvZy1tdWx0ICgtIDEgKC8geCAxMDApKQogICAgICAgIHRha2UtbGltaXQgKC0gMSBwcm9nLW11bHQpXQogICAgKHRha2Utd2hpbGUgIyg+ICUgdGFrZS1saW1pdCkgKGl0ZXJhdGUgIygqICUgcHJvZy1tdWx0KSAxKSkpKQoKKGRlZm4gcGFydGl0aW9uLWJlYXJzIFtiZWFyc10KICAiR2l2ZW4gYSBzZXF1ZW5jZSBvZiBiZWFycyBncm91cHMgdGhlbSBieSBjYXJzIgogIChsb29wIFtzIGJlYXJzCiAgICAgICAgIGFjYyBbXV0KICAgIChjb25kCiAgICAgIChlbXB0eT8gcykKICAgICAgICBhY2MKICAgICAgKD4gMSAoKyAoZmlyc3QgcykgKHJlZHVjZSArIChwZWVrIGFjYykpKSkKICAgICAgICAocmVjdXIgKHJlc3QgcykgKGNvbmogKHBvcCBhY2MpIChjb25qIChwZWVrIGFjYykgKGZpcnN0IHMpKSkpCiAgICAgIDpkZWZhdWx0CiAgICAgICAgKHJlY3VyIChyZXN0IHMpIChjb25qIGFjYyBbKGZpcnN0IHMpXSkpKSkpCgooZGVmbiBzb2x1dGlvbiBbeF0KICAobGV0IFtkaXN0cmlidXRpb24gKC0+IHggbm90LWxhc3QtY2FyIHBhcnRpdGlvbi1iZWFycykKICAgICAgICBzaXplIChjb3VudCBkaXN0cmlidXRpb24pXQogICAgKHByaW50bG4gIkNhcnMgcmVxdWlyZWQiIChpbmMgc2l6ZSkgIlxuIgogICAgICAoYXBwbHkgc3RyIChtYXAtaW5kZXhlZCAjKHN0ciAoaW5jICUxKSAiOiIgJTIgIlxuIikgZGlzdHJpYnV0aW9uKSkKICAgICAgKHN0ciAoaW5jIHNpemUpICI6YWxsIG90aGVyIGJlYXJzIikpKSkKCihzb2x1dGlvbiAxMCkKKHNvbHV0aW9uIDIwKQ==