Report abuse

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
def mix_and_match(candles, recipients, candles_per_recipient)
  if(candles.values.inject{|sum,x|sum+x}<(candles_per_recipient*recipients.length))
    raise "there must be enough candles"
  end
  order = {}
  current_candles = candles
  recipients.each do |recipient|
    order[recipient], current_candles = fill_basket(current_candles, recipient, candles_per_recipient)
  end
  order[:extra] = current_candles
  puts order.inspect
end

def fill_basket(candles, recipient, candles_per_recipient)
  basket = []
  dup_count = 0 
  while basket.length < candles_per_recipient 
    candle = candles.keys[rand(candles.length)]
    if candles[candle] > 0
      if(dup_count<5)
        if(!basket.include?(candle))
          candles[candle] = candles[candle]-1
          basket << candle
        else
          dup_count = dup_count + 1
        end
      else
        candles[candle] = candles[candle]-1
        basket << candle
      end
    end
  end
  [basket, candles]
end