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),
("[]", True),
("]", False),
]
def run_tests() -> None:
for given, expected in TESTS:
assert balanced(given) == expected