From ca8ffc44b5bf6b8982cf62b50ffb2bcf2d8695af Mon Sep 17 00:00:00 2001 From: james Date: Thu, 7 Nov 2024 14:15:18 -0600 Subject: [PATCH] Refactored and randomized picking order. --- run_names.rb | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/run_names.rb b/run_names.rb index ed667b8..e0359e3 100644 --- a/run_names.rb +++ b/run_names.rb @@ -1,22 +1,40 @@ #!/usr/bin/env ruby -names = [ 'Allen', 'Vickie', 'Matt', 'Lisa', 'James', 'Pich', 'Kristen', 'Jason', 'Markie' ] +adults = [ 'Allen', 'Vickie', 'Matt', 'Lisa', 'James', 'Pich', 'Kristen', 'Jason', 'Markie' ] +kids = [ 'Malachi', 'Isaiah', 'Samara', 'Ethan', 'Kennedi', 'Kasen', 'Griffin', 'Millie', 'Otto' ] +names = adults -hat = [] +class Participant + + attr_accessor :name + attr_accessor :buys_for + + def initialize name + @name = name + end -names.each do |name| - hat.push name end -buys_for = {} +participants = Array.new +names.each { |name| participants.push Participant.new(name) } -names.each do |name| - while buys_for[name] == nil - pick = hat[rand(hat.length)] - puts "#{name} picks #{pick}" - unless pick == name - buys_for[name] = pick +# put everyone's name in the hat +hat = Array.new +participants.each { |participant| hat.push participant } + +# randomize the order names are picked +pick_order = participants.shuffle + +# pick names from hat, making sure they don't pick themself +pick_order.each do |participant| + + while participant.buys_for == nil + pick = hat[rand(hat.length)] + puts "#{participant.name} picks #{pick.name}" + unless pick == participant + participant.buys_for = pick hat.delete(pick) end end + end