Your question is Refactor for Readability. 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).
Pigment tracks planning "scenarios" whose confidence score should drift over time as deadlines approach, the same way the classic Gilded Rose kata ages inventory quality. A Software Engineer candidate is handed this real function from that part of the codebase and told a new scenario type needs to be added, but every previous attempt to touch this function has introduced a regression.
def update_scenarios(scenarios):
for i in range(len(scenarios)):
if scenarios[i].name != "Aged Assumption" and scenarios[i].name != "Hiring Forecast":
if scenarios[i].confidence > 0:
if scenarios[i].name != "Board Deck":
scenarios[i].confidence = scenarios[i].confidence - 1
else:
if scenarios[i].confidence < 50:
scenarios[i].confidence = scenarios[i].confidence + 1
if scenarios[i].name == "Hiring Forecast":
if scenarios[i].daysRemaining < 11:
if scenarios[i].confidence < 50:
scenarios[i].confidence = scenarios[i].confidence + 1
if scenarios[i].daysRemaining < 6:
if scenarios[i].confidence < 50:
scenarios[i].confidence = scenarios[i].confidence + 1
if scenarios[i].name != "Board Deck":
scenarios[i].daysRemaining = scenarios[i].daysRemaining - 1
if scenarios[i].daysRemaining < 0:
if scenarios[i].name != "Aged Assumption":
if scenarios[i].name != "Hiring Forecast":
if scenarios[i].confidence > 0:
if scenarios[i].name != "Board Deck":
scenarios[i].confidence = scenarios[i].confidence - 1
else:
scenarios[i].confidence = scenarios[i].confidence - scenarios[i].confidence
else:
if scenarios[i].confidence < 50:
scenarios[i].confidence = scenarios[i].confidence + 1
Explain how you would refactor this to be readable and easy to extend with a new scenario type, without changing any of its existing behavior.