Hi everyone, 

Does anyone know of a straightforward way to get something like 
clojure.math/combinatorics/partitions that works more like partition in the 
core library, that is, that only selects partitions with adjacent elements?

In other words, right now this is the problem:

(require '[clojure.math.combinatorics :as c])
(c/partitions [:a :b :c] :min 2)

=> (([:a :b] [:c]) ([:a :c] [:b]) ([:a] [:b :c]) ([:a] [:b] [:c]))

But that ([:a :c] [:b]) there in the second position isn't a proper partition 
because :a and :c aren't adjacent in the original vector.  

I feel like there's got to be a standard, canonical solution for this, or some 
existing sequence or combinatorics function with a funny name that just returns 
(([a :b] [:c]) ([:a] [:b :c]) ([:a] [:b] [:c])) in this situation.  I just 
don't know it... 

The best I can come up with is kind of a hackish workaround that only works 
when the original vector is sorted, namely, flattening all the partitions and 
testing to see whether they are sorted too, i.e.: 

(require '[clojure.math.combinatorics :as c])

(defn test-fn [part]
  (let [f (flatten part)]
    (= f (sort f))))

(filter test-fn (c/partitions [:a :b :c] :min 2))

=> (([:a :b] [:c]) ([:a] [:b :c]) ([:a] [:b] [:c]))  ; Yay! :-)

And that works, but, as noted, only when the original vector is sorted.  What 
if someone wanted to preserve adjacencies in an unsorted vector?

All thoughts appreciated, thanks!

Cheers,

-Paul

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to