Skip to content

Instantly share code, notes, and snippets.

@bramdemoor
Created November 7, 2014 14:49
Show Gist options
  • Save bramdemoor/97c54bb35393c0ea2e02 to your computer and use it in GitHub Desktop.
Save bramdemoor/97c54bb35393c0ea2e02 to your computer and use it in GitHub Desktop.
ChristmasPresents 2, with global retry
begin
puts "Namen trekken\n#############"
personGroups = [
['Bram'],
['Jef'],
['Leen', 'Dries'],
['Marijke', 'Stijn'],
]
kaartjestrekkers = personGroups.flatten.shuffle
raise ArgumentError, 'Oneven aantal personen' unless kaartjestrekkers.length.even?
raise ArgumentError, 'Niet alle namen zijn uniek' if kaartjestrekkers.uniq.length != kaartjestrekkers.length
kaartjes = personGroups.flatten
kaartjestrekkers.each do |p|
validCards = personGroups.reject {|g| g.include? p}.flatten
kaartje = kaartjes.delete((kaartjes & validCards).sample)
if kaartje.nil?
puts "!!! bConflict!!! #{p} kan geen geldig kaartje meer trekken"
raise "conflict"
end
puts "#{p} => #{kaartje}"
end
rescue
puts "Het ging fout, nieuwe poging..."
retry
end
@bramdemoor
Copy link
Author

Note to self: triggers infinite loop when one of the ArgumentErrors is thrown. Needs rewrite ;)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment