[Niklas Frykholm <niklas / kagi.com>, 2004-10-04 10.49 CEST]
> An interesting problem. It seems trivial at first, but when you start to 
> think about whether a solution is possible or not and in which way you 
> can assign santas as random as possible, but without painting yourself 
> into a corner it gets quite complex. Here is a mathematical analysis:
[...]

I didn't participate, but I thought it was a trivial case of sorting the
families by number of members and start giving santas from the most populous
down. I should have tested that theory with code, but I didn't have time on
the weekend :(. How can it not work?

Something like this: (NOT TESTED)

Participant = Struct.new :name, :family, :email
participants = []


while line = gets
	line =~ /^(\w+) (\w+) (.*+)$/
	participants << Participant.new($1, $2, $3)
end

families = {}
participants.each do |p|
	families[p.family] ||= []
	families[p.family] << p
end

families = families.values.sort_by{ |a| a.size }.reverse

families.each do |family| family.each do |member|
	idx = rand(participants.size) until participants[idx].family != member.family
	print member.family, "->", participants[idx].family
	participants.delete_at idx
end end

--