Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Brackets by Rafal.U
def checkio(expression):
NAWIASY_OTWARTE = ("(", "[", "{") # lista przechowująca nawiasy otwarte
NAWIASY_ZAMKNIETE = (")", "]", "}") # lista przechowujaca nawiasy zamkniete, w obu listach kazdy rodzaj nawiasów ma taki sam index
bufor = [] # lista buforowa do sprawdzania czy liczba i kolejnosc wystapienia nawiasów otwartych i zamknietych jest taka sama
# nawiasy otwarte i zamkniete w rownaniach wystepuja symetrycznie
for znak in expression: # przypisywanie do zmiennej znak kolejnych znaków równania
if znak in NAWIASY_OTWARTE: # sprawdzenie czy znak równania jest otwartym nawiasem
bufor.append(NAWIASY_OTWARTE[NAWIASY_OTWARTE.index(znak)]) # dodanie do bufora odpowiedniego rodzaju nawiasu otwartego
if znak in NAWIASY_ZAMKNIETE: # sprawdzenie czy aktualnie pobrany znak z rownania jest nawiasem zamknietym
if bufor == []: # sprawdzenie czy ilość znaków zamknietych nie jest wieksza od ilosci znaków otwartych, musi byc ich po równo w równaniu
return False
if bufor.pop() != NAWIASY_OTWARTE[NAWIASY_ZAMKNIETE.index(znak)]: #sprawdzenie czy nawias poprzedzajacy nawias zamkniety w rownaniu jest nawiasem otwarty
return False #tego samego rodzaju oraz usuniecie z listy bufor ostatniego elementu, czyli
#ostatnio dodanego nawiasu otwartego, sprawdzane jest lustrzane odbicie poszczegolnych rodzaji nawiasów
if bufor == []: # gdy skończymy przeszukiwanie znak po znaku równania sprawdzamy czy pomocnicza lista bufor jest pusta czy liczba nawiasów
return True #otwartych i zamknietych byla taka sama
return False
#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"
Dec. 10, 2016