Advertisement
Guest User

Untitled

a guest
Aug 24th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.90 KB | None | 0 0
  1. use std::iter::once;
  2.  
  3. fn form_groups(students: &[Vec<usize>]) -> Vec<Vec<usize>> {
  4. let mut groups: Vec<Vec<usize>> = Vec::new();
  5.  
  6. for (student, friends) in students.iter().enumerate() {
  7. let group = groups.iter_mut().find(|g| g.contains(&student));
  8.  
  9. match group {
  10. None => groups.push(once(student).chain(friends.iter().copied()).collect()),
  11. Some(g) => {
  12. g.extend(friends.iter().copied());
  13. }
  14. }
  15. }
  16.  
  17. for group in &mut groups {
  18. group.sort_unstable();
  19. group.dedup();
  20. }
  21.  
  22. groups
  23. }
  24.  
  25. fn main() {
  26. let students = vec![
  27. vec![1, 2],
  28. vec![0, 5],
  29. vec![0],
  30. vec![6],
  31. vec![],
  32. vec![5],
  33. vec![6],
  34. ];
  35.  
  36. let groups = form_groups(&students);
  37.  
  38. println!(
  39. "the number of friend groups in the class is {};\n{:?}",
  40. groups.len(),
  41. groups
  42. );
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement