Exemplo n.º 1
0
def balanced_parentheses(paren_str):
    """problem involving applications of stack"""

    # filter out all values besides brackets
    matches = re.finditer(r'[(){}[\]]+', paren_str)
    parsed_iter = itertools.chain.from_iterable(
                            result.group() 
                            for result in matches)
    
    opening = Stack()
    
    for i in parsed_iter:
        if i in ("(", "{", "["):
            opening.add(i)
        
        else:
            if not opening.isEmpty():
                if   i == ")" and opening.peek() == "(":
                    opening.get()
                elif i == "}" and opening.peek() == "{":
                    opening.get()
                elif i == "]" and opening.peek() == "[":
                    opening.get()
                else:
                    return False
                
            else:
                return False

    return True  
Exemplo n.º 2
0
def revstringstack(str):
    # with stack implemented
    stack = Stack()
    
    for char in str:
        stack.add(char)
        
    new_str = ''
    
    while not stack.isEmpty():
        new_str += stack.get()
        
    return new_str    
Exemplo n.º 3
0
class TestStack(unittest.TestCase):
    @staticmethod
    def add_to_structure(self, items):
        for i in items:
            self.structure.add(i)

    def setUp(self):
        self.structure = Stack()

    def test_structure_isEmpty(self):
        self.assertEqual(self.structure.isEmpty(), True)

        self.add_to_structure(self, range(3))
        self.assertEqual(self.structure.isEmpty(), False)

    def test_structure_peek(self):

        structure = self.add_to_structure(
            self, iter(['people', 'potatoes', 'pansies']))
        self.assertEqual(self.structure.peek(), 'pansies')

    def test_structure_get_length(self):
        structure = self.add_to_structure(self, range(5))
        self.assertEqual(self.structure.get_length(), 5)

    def test_structure_get(self):
        structure = self.add_to_structure(self, range(3))

        # test that first in are first out
        for i in reversed(range(3)):
            self.assertEqual(self.structure.get(), i)

    def test_empty_items(self):
        # for when get, or peek is called on empty structure
        self.assertRaises(EmptyItemsError, lambda: self.structure.get())
        self.assertRaises(EmptyItemsError, lambda: self.structure.peek())