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