def balanced(brackets: str) -> bool:
closing_brackets = (")", "]", "}")
opening_brackets = ("(", "[", "{")
checks = {
open_brace: close_brace
for open_brace, close_brace in zip(opening_brackets, closing_brackets)
}
if not brackets or brackets in closing_brackets:
return False
stack = []
for bracket in brackets:
if bracket in opening_brackets:
stack.append(bracket)
elif bracket in closing_brackets:
if checks[stack[-1]]:
stack.pop()
else:
return False
return True if not stack else False
TESTS = [
("(", False),
(")", False),
("()", True),
("(())", True),
("[", False),
("]", False),
["[]", True],
["[[]]", True],
("{", False),
("}", False),
{"{}", True},
{"{{}}", True},
]
def run_tests() -> None:
for given, expected in TESTS:
assert balanced(given) == expected, (given, expected)
run_tests()