Advertisement
Guest User

Untitled

a guest
Jul 12th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.33 KB | None | 0 0
  1. /* OUTPUT
  2. Ben   : Fun
  3. John  : Fun
  4. Tom   : Fun
  5. Chris : Cool
  6. Josh  : Cool
  7. Alan  : Super
  8. Timmy : Sporty
  9. Greg  : None
  10. */
  11.  
  12. fn main() {
  13.     let S = ["Base", "S", "Bask", "T"];
  14.     let C = ["Cool", "Fun", "Super", "Sporty"];
  15.     let C_s = [vec![0, 1], vec![0], vec![2], vec![2]];
  16.     let K = ["Ben", "John", "Tom", "Chris", "Josh", "Alan", "Timmy", "Greg"];
  17.     let K_s = [0, 0, 0, 1, 1, 2, 2, 3];
  18.  
  19.     // sports to kids
  20.     let mut S_k = vec![vec![]; S.len()];
  21.     (0..K.len()).for_each(|k| S_k[K_s[k]].push(k));
  22.  
  23.     // sports to camps
  24.     let mut S_c = vec![vec![]; S.len()];
  25.     (0..C.len()).for_each(|c| C_s[c].iter().for_each(|&s| S_c[s].push(c)));
  26.  
  27.     let mut order = (0..S.len()).collect::<Vec<usize>>();
  28.     order.sort_by_key(|&s| S_k[s].len());
  29.  
  30.     let mut C_spots = vec![3; C.len()];
  31.     let mut K_c: Vec<Option<usize>> = vec![None; K.len()];
  32.     let mut i = 0;
  33.     while i < S.len() {
  34.         let s = order[i];
  35.         if let Some(k) = S_k[s].pop() {
  36.             // Look for the camps with most spots available
  37.             match S_c[s]
  38.                 .iter()
  39.                 .filter(|&&c| C_spots[c] > 0)
  40.                 .max_by_key(|&&c| C_spots[c])
  41.             {
  42.                 Some(&c) => {
  43.                     C_spots[c] -= 1;
  44.                     K_c[k] = Some(c);
  45.                 }
  46.                 None => i += 1,
  47.             }
  48.         } else {
  49.             i += 1;
  50.         }
  51.     }
  52.     K_c.iter().enumerate().for_each(|(k, &c)| {
  53.         println!("{:6}: {}", K[k], match c {
  54.             Some(a) => C[a],
  55.             None => "None"
  56.         });
  57.     });
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement