I have following database columns team_a_set_1
, team_a_set_2
, team_a_set_3
, team_a_set_4
, team_a_set_5
, team_b_set_1
, team_b_set_2
, team_b_set_3
, team_b_set_4
, team_b_set_5
. I am using these columns to store tennis game result for 5 sets.
Now I am trying to find out who is winner between team a
and team b
. Who ever wins the max number of sets is winner. My code looks roughly like this
def find_winner
team_a_win_count = 0
team_b_win_count = 0
if team_a_set_1.present? && team_b_set_1.present?
if team_a_set_1 > team_b_set_1
team_a_win_count = team_a_win_count + 1
elsif team_b_set_1 > team_a_set_1
team_b_win_count = team_b_win_count +1
end
end
if team_a_set_2.present? && team_b_set_2.present?
if team_a_set_2 > team_b_set_2
team_a_win_count = team_a_win_count + 1
elsif team_b_set_2 > team_a_set_2
team_b_win_count = team_b_win_count +1
end
end
if team_a_set_3.present? && team_b_set_3.present?
if team_a_set_3 > team_b_set_3
team_a_win_count = team_a_win_count + 1
elsif team_b_set_3 > team_a_set_3
team_b_win_count = team_b_win_count +1
end
end
if team_a_set_4.present? && team_b_set_4.present?
if team_a_set_4 > team_b_set_4
team_a_win_count = team_a_win_count + 1
elsif team_b_set_4 > team_a_set_4
team_b_win_count = team_b_win_count +1
end
end
if team_a_set_5.present? && team_b_set_5.present?
if team_a_set_5 > team_b_set_5
team_a_win_count = team_a_win_count + 1
elsif team_b_set_5 > team_a_set_5
team_b_win_count = team_b_win_count +1
end
end
if team_a_win_count > team_b_win_count
puts 'Team A won'
elsif team_b_win_count > team_a_win_count
puts 'Team B won'
else
puts 'Draw'
end
end
As you can see I am repeating same logic 5 times in if statement. I want to refactor this code so I don't have to repeat same thing 5 times. I tried something like this but it didn't work
1.upto(5) do |n|
if "team_a_set_#{n}".present? && "team_b_set_#{n}".present?
if "team_a_set_#{n}" > "team_b_set_#{n}" # this is not working because it's comparing string
team_a_win_count = team_a_win_count + 1
elsif "team_b_set_#{n}" > "team_a_set_#{n}"
team_b_win_count = team_b_win_count + 1
end
end
end
So how can I refactor this code so that I don't have to write if statement 5 times ?
Update: Based on everyone suggestions I end up re designing my database. Now I am storing sets in Hash. And everything looks nice and clean now.