Skip to content

Instantly share code, notes, and snippets.

@minikomi
Forked from isa/gist:2571012
Created May 2, 2012 09:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save minikomi/2575554 to your computer and use it in GitHub Desktop.
Save minikomi/2575554 to your computer and use it in GitHub Desktop.
Convert in less than 30 lines
Question: Convert following into the latter data structure in less than 30 lines:
List:
A, B, C
A, C, E
E, F, D
D, A, J
E, D, J
List
A, B, 1 (frequency)
A, C, 2
A, D, 1
A, E, 1
A, J, 1
B, C, 1
C, E, 1
D, E, 2
D, F, 1
D, J, 2
E, F, 1
E, J, 1
(def l [["A" "B" "C"] ["A" "C" "E"] ["D" "A" "J"] ["E" "D" "J"] ["E" "F" "D"]])
(defn combos [x]
(loop [s x c []]
(if (empty? s)
c
(recur (rest s)
(concat c (map #(conj [(first s)] %) (rest s)))))))
(map #(list (first %) (count (last %)))
(sort-by first
(group-by identity
(reduce concat (map combos l)))))
((["A" "B"] 1) (["A" "C"] 2) (["A" "E"] 1) (["A" "J"] 1) (["B" "C"] 1) (["C" "E"] 1) (["D" "A"] 1) (["D" "J"] 2) (["E" "D"] 2) (["E" "F"] 1) (["E" "J"] 1) (["F" "D"] 1))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment