From 374f0d359768aa2891b2a6dc24f195f0ec277ab2 Mon Sep 17 00:00:00 2001 From: Haidong Ji Date: Wed, 2 Jan 2019 16:09:25 -0600 Subject: Check bracket done! Strict TDD is not possible, at least the type I'm used to through Eclipse PyDev, where I write tests first, and rely on PyDev to generate files/function stubs. Bummer, but I decided to stick with PyCharm just to learn it. --- .idea/vcs.xml | 6 +++++ sources/__init__.py | 0 sources/check_bracket.py | 35 ++++++++++++++++++++++++++++ tests/__init__.py | 0 tests/check_bracketTest.py | 58 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 99 insertions(+) create mode 100644 .idea/vcs.xml create mode 100644 sources/__init__.py create mode 100644 sources/check_bracket.py create mode 100644 tests/__init__.py create mode 100644 tests/check_bracketTest.py diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/sources/__init__.py b/sources/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sources/check_bracket.py b/sources/check_bracket.py new file mode 100644 index 0000000..bd7fa6e --- /dev/null +++ b/sources/check_bracket.py @@ -0,0 +1,35 @@ +# Uses python3 +def check_bracket(exp): + char_stack = [] + unmatched_opening_bracket = 0 + count = 0 + brackets = ['[', ']', '(', ')', '{', '}'] + for i in range(len(exp)): + c = exp[i] + if c not in brackets: + count = count + 1 + continue + if c == '[' or c == '(' or c == '{': + char_stack.append(c) + count = count + 1 + unmatched_opening_bracket = count + else: + if len(char_stack) == 0: + return i + 1 + top = char_stack[-1] + del (char_stack[-1]) + if (top == '[' and c != ']') or (top == '(' and c != ')') or (top == '{' and c != '}'): + return i + 1 + else: + unmatched_opening_bracket = unmatched_opening_bracket - 1 + count = count + 1 + if len(char_stack) == 0: + return "Success" + else: + if unmatched_opening_bracket > 0: + return unmatched_opening_bracket + return count + + +exp = input() +print(check_bracket(exp)) diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/check_bracketTest.py b/tests/check_bracketTest.py new file mode 100644 index 0000000..40f97d0 --- /dev/null +++ b/tests/check_bracketTest.py @@ -0,0 +1,58 @@ +import unittest + +from sources.check_bracket import check_bracket + + +class MyTestCase(unittest.TestCase): + + def test1(self): + exp = "[]" + self.assertEqual("Success", check_bracket(exp)) + + def test2(self): + exp = "{}[]" + self.assertEqual("Success", check_bracket(exp)) + + def test3(self): + exp = "[()]" + self.assertEqual("Success", check_bracket(exp)) + + def test4(self): + exp = "(())" + self.assertEqual("Success", check_bracket(exp)) + + def test5(self): + exp = "{[]}()" + self.assertEqual("Success", check_bracket(exp)) + + def test6(self): + exp = "{" + self.assertEqual(1, check_bracket(exp)) + + def test7(self): + exp = "{[}" + self.assertEqual(3, check_bracket(exp)) + + def test8(self): + exp = "foo(bar)" + self.assertEqual("Success", check_bracket(exp)) + + def test9(self): + exp = "foo(bar[i);" + self.assertEqual(10, check_bracket(exp)) + + def test10(self): + exp = "[](()" + self.assertEqual(3, check_bracket(exp)) + + def test11(self): + exp = "{[}haha" + self.assertEqual(3, check_bracket(exp)) + + def test12(self): + exp = "haha{[}" + self.assertEqual(7, check_bracket(exp)) + + +if __name__ == '__main__': + unittest.main() -- cgit v1.2.3