curriculum/challenges/english/blocks/workshop-breadth-first-search/68da6138d70960c197ec5ef3.md
Now you need to handle adding closing parentheses. The key rule is that you can only add a closing parenthesis if it maintains balance, meaning there must be more opening parentheses used than closing parentheses.
Still within the else block, add second if statement to check if closes_used < opens_used.
If this condition is true, append another new tuple to the queue: (current + ')', opens_used, closes_used + 1). This represents the state after adding a closing parenthesis.
You should have a second if statement inside your else block.
({ test: () => runPython(`
import ast
assert isinstance(_Node(_code).find_function("gen_parentheses").find_whiles()[0].find_bodies()[0].find_ifs()[0].tree.orelse[1], ast.If)
`) })
Your second nested if statement should check if closes_used < opens_used.
({ test: () => runPython(`
assert _Node(_Node(_code).find_function("gen_parentheses").find_whiles()[0].find_bodies()[0].find_ifs()[0].tree.orelse[1].test).is_equivalent("closes_used < opens_used")
`) })
You should append (current + ')', opens_used, closes_used + 1) to the queue when the condition is true.
({ test: () => runPython(`
assert _Node(_Node(_code).find_function("gen_parentheses").find_whiles()[0].find_bodies()[0].find_ifs()[0].tree.orelse[1]).has_call("queue.append((current + ')', opens_used, closes_used + 1))")
`) })
def gen_parentheses(pairs):
if not isinstance(pairs, int):
return 'The number of pairs should be an integer'
if pairs < 1:
return 'The number of pairs should be at least 1'
queue = [('', 0, 0)]
result = []
while queue:
print(queue)
current, opens_used, closes_used = queue.pop(0)
if len(current) == 2 * pairs:
result.append(current)
--fcc-editable-region--
else:
if opens_used < pairs:
queue.append((current + '(', opens_used + 1, closes_used))
--fcc-editable-region--
return result
print(gen_parentheses(1))