Este año vamos algo justos para el reparto de papeletas del amigo invisible, así que una pequeña contribución para la generación automática de parejas (en Ruby):
# Preparamos las posibilidades de elección y las personas que eligen
posibilidades = ['marta', 'maria', 'mikel']
humanos = posibilidades.clone
asignacion = []
for h in humanos
# Si me ha tocado mi propio nombre, vuelvo a cojer una
# papeleta hasta que me salga otro nombre que no sea el mio
aun_no = true
while aun_no
i = rand(0..posibilidades.size-1)
p = posibilidades[i]
if h != p || posibilidades.size == 1
# ¡ya tenemos una pareja!
posibilidades.delete_at(i)
asignacion << {h => p}
aun_no = false
end
end
end
# Mostramos las parejas por pantalla
for a in asignacion
a.each {|key,value|
key != value ? puts("A #{key} le ha tocado #{value}") : puts("Oh, a #{key} le ha tocado a si mismo")
}
end