Skip to content

Instantly share code, notes, and snippets.

@proman21
Created July 31, 2017 08:37
Show Gist options
  • Save proman21/256566c2f3cd36e2adcc7917b8f46db5 to your computer and use it in GitHub Desktop.
Save proman21/256566c2f3cd36e2adcc7917b8f46db5 to your computer and use it in GitHub Desktop.
Recursive Impl of a Subsets function
fn subsets<T>(set: &[T]) -> Vec<Vec<&T>> {
if let Some((first, rest)) = set.split_first() {
let mut subsets = subsets(rest);
for mut set in subsets.clone() {
set.insert(0, first.clone());
subsets.push(set);
}
subsets
} else {
vec![vec![]]
}
}
#[test]
fn subsets_test() {
let set = vec![1, 2, 3, 4];
let res = subsets(&set);
assert_eq!(subsets.len(), set.len().pow(2));
println!("Subsets: {:?}", subests);
}
fn main() {
let set = vec!['a', 'b', 'c', 'd'];
let mut subsets = subsets(&set);
subsets.sort_by_key(|s| s.len());
println!("Subsets: {:?}", subsets);
assert_eq!(subsets.len(), set.len().pow(2));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment