Created
June 5, 2014 14:34
-
-
Save GuillermoPena/8d1b1d05205c59bb9f88 to your computer and use it in GitHub Desktop.
CheckIO - Electronic Station Challenge 1 : Brackets
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 characters
# 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" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment