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