Amigo invisible

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

About Ibon

Me encanta salir a darme paseos, patinar, esquiar y jugar a baloncesto (alguna pachanga que otra en Larrabetzu los miércoles).

Creo en los principios que fundamentan el Software Libre, y me parece una gran herramienta para conseguir una sociedad mas justa.

This entry was posted in Ubuntu and tagged , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *