/ rust / powerset.rs
powerset.rs
 1  /// Calculate the powerset of a set.
 2  fn powerset<T: Clone>(set: &[T]) -> Vec<Vec<T>> {
 3    let mut powerset = Vec::new();
 4  
 5    for mask in 0..1 << set.len() {
 6      let mut subset = Vec::new();
 7  
 8      for (i, x) in set.iter().enumerate() {
 9        if (mask & 1 << i) != 0 {
10          subset.push(x.clone());
11        }
12      }
13  
14      powerset.push(subset);
15    }
16  
17    powerset
18  }