• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use std::collections::BTreeSet;
2 
all<T>(input: &[T]) -> BTreeSet<BTreeSet<T>> where T: Ord + Eq + Clone,3 pub fn all<T>(input: &[T]) -> BTreeSet<BTreeSet<T>>
4 where
5     T: Ord + Eq + Clone,
6 {
7     let mut permutations = BTreeSet::new();
8 
9     if input.is_empty() {
10         return permutations;
11     }
12 
13     permutations.insert(input.iter().cloned().collect());
14 
15     if input.len() > 1 {
16         for t in input {
17             let p = input
18                 .iter()
19                 .filter(|pt| *pt != t)
20                 .cloned()
21                 .collect::<Vec<_>>();
22 
23             for pt in all(&p) {
24                 permutations.insert(pt);
25             }
26         }
27     }
28 
29     permutations
30 }
31