Your question is Fix All Bugs in Code. Take a moment with it on the right.
Talk me through your thinking if you like. When you're confident, submit your answer and I'll grade it like a real screen (7/10 or better passes).
Nextcapital models employer 401(k) matching, where the employer matches a percentage of what an employee contributes, tiered by how much of their salary they're contributing. The tiers describe bands as a percentage of salary — for example, "match 100% of contributions up to 3% of salary, then 50% of contributions on the next 2%." This method is supposed to compute the total dollar match for one employee, but the numbers it's producing don't line up with the plan documents.
def employer_match(salary, contribution_rate, match_tiers)
employee_contribution = salary * contribution_rate
match_total = 0
match_tiers.each do |tier|
if employee_contribution > tier[:up_to]
match_total += tier[:up_to] * tier[:rate]
else
match_total += employee_contribution * tier[:rate]
end
end
match_total
end
match_tiers looks like [{ up_to: 0.03, rate: 1.0 }, { up_to: 0.05, rate: 0.5 }], where up_to is a fraction of salary and rate is the employer's match rate for that band. Fix all the bugs in this method. Explain each one and how it produces a wrong dollar figure, since this feeds directly into what employees see as their expected match.