Advertisement
kingsleyh

D Secret Santa Challenge

Feb 4th, 2015
317
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
D 1.10 KB | None | 0 0
  1. import std.stdio;
  2. import std.algorithm;
  3. import std.array;
  4. import std.random;
  5.  
  6. class SecretSanta {
  7.  
  8.    private string[string] santa;
  9.  
  10.    private string[] LIST = [
  11.       "David Jason",
  12.       "Claire Jason",
  13.       "Vicky Pollard",
  14.       "Keith Pollard",
  15.       "Ian Smith",
  16.       "Maria Osawa",
  17.       "Mark Kelly",
  18.       "Sarah Kelly"
  19.   ];
  20.  
  21.    string[string] givePresents(){
  22.       assign;
  23.       while(hasUnassigned){
  24.         assign;
  25.       }
  26.       return santa;
  27.    }
  28.  
  29. private  bool hasUnassigned(){
  30.     return canFind(santa.values,"unknown");
  31.   }
  32.  
  33.   private void assign(){
  34.      writeln("attempting to assign");
  35.       foreach (name; LIST) {
  36.         string[] list = LIST.filter!(n => n != name)
  37.                               .filter!(n => !canFind(n.split()[$-1],name))
  38.                               .filter!(n => !canFind(santa.values,n)).array;
  39.  
  40.         string randomName = list.length == 0 ? "unknown" : list[uniform(0,$)];
  41.  
  42.          santa[name] = randomName;
  43.       }
  44.   }
  45.  
  46. }
  47.  
  48.  
  49. void main(){
  50.   SecretSanta secretSanta = new SecretSanta();
  51.   writeln(secretSanta.givePresents());
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement