Created
June 5, 2014 14:34
Revisions
-
GuillermoPena created this gist
Jun 5, 2014 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,36 @@ # CheckIO - Electronic Station Challenge 1 : Brackets # http://checkio.org # You are given an expression with numbers, brackets and operators. # For this task only the brackets matter. Brackets come in three flavors: "{}" "()" or "[]". # Brackets are used to determine scope or to restrict some expression. # If a bracket is open, then it must be closed with a closing bracket of the same type. # The scope of a bracket must not intersected by another bracket. # For this task, you should to make a decision to correct an expression or not based on the brackets. # Do not worry about operators and operands. # Input: An expression with different of types brackets. A string (unicode). # Output: The correctness the expression or don’t. A boolean. # Precondition: There are only brackets ("{}" "()" or "[]"), digits or operators ("+" "-" "*" "/"). def checkio(expression): BRACKETS="()[]{}" openBrackets=[] for b in expression: if BRACKETS.count(b)==0: continue # No bracket character if "([{".count(b): openBrackets+=b # Adding open bracket else: # if char is a close bracket... if not openBrackets: return False # Empty open brackets array case lastBracketIndex=BRACKETS.index(openBrackets[-1]) if b!=BRACKETS[lastBracketIndex+1]: return False # Different type of bracket case else: openBrackets=openBrackets[:-1] # Removing bracket from array... if openBrackets: return False # Some open bracket remaining case return True #These "asserts" using only for self-checking and not necessary for auto-testing if __name__ == '__main__': assert checkio("((5+3)*2+1)") == True, "Simple" assert checkio("{[(3+1)+2]+}") == True, "Different types" assert checkio("(3+{1-1)}") == False, ") is alone inside {}" assert checkio("[1+1]+(2*2)-{3/3}") == True, "Different operators" assert checkio("(({[(((1)-2)+3)-3]/3}-3)") == False, "One is redundant" assert checkio("2+3") == True, "No brackets, no problem"