diff options
author | Haidong Ji | 2019-01-02 16:09:25 -0600 |
---|---|---|
committer | Haidong Ji | 2019-01-02 16:09:25 -0600 |
commit | 374f0d359768aa2891b2a6dc24f195f0ec277ab2 (patch) | |
tree | fd09cb125e4e2be2472e1e66b1896aee56e82872 |
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.
-rw-r--r-- | .idea/vcs.xml | 6 | ||||
-rw-r--r-- | sources/__init__.py | 0 | ||||
-rw-r--r-- | sources/check_bracket.py | 35 | ||||
-rw-r--r-- | tests/__init__.py | 0 | ||||
-rw-r--r-- | tests/check_bracketTest.py | 58 |
5 files changed, 99 insertions, 0 deletions
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 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="$PROJECT_DIR$" vcs="Git" /> + </component> +</project>
\ No newline at end of file diff --git a/sources/__init__.py b/sources/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/sources/__init__.py 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 --- /dev/null +++ b/tests/__init__.py 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() |