fork download
  1. otwarte = '([{<'
  2. zamkniete = ')]}>'
  3.  
  4. # sprawdza czy nawias jest otwarty
  5. def czyOtwarty(nawias):
  6. return nawias in otwarte
  7.  
  8. # sprawdza czy nawias jest zamkniety
  9. def czyZamkniety(nawias):
  10. return nawias in zamkniete
  11.  
  12. # sprawdza czy indeksy nawiasow otwartego i zamknietego sa takie same '(' = 0, '[' = 1, ...
  13. def czyPasuja(otwarty, zamkniety):
  14. return otwarte.index(otwarty) == zamkniete.index(zamkniety)
  15.  
  16. # funkcja sprawdzajaca, nawiasy i stos do odkladania nawiasow (string, string)
  17. def czyNawiasyPasuja(nawiasy, stos):
  18. # czy nawiasy sa puste, C++ nawiasy.isEmpty()
  19. if len(nawiasy) == 0:
  20. # zwraca czy stos pusty, C++ stos.isEmpty()
  21. return len(stos) == 0
  22. # czy nawias pierwszy jest otwarty
  23. elif czyOtwarty(nawiasy[0]):
  24. # szuka zamknietych nawiasow bez tego pierwszego, odkladajac ten otwarty na stos
  25. return czyNawiasyPasuja(nawiasy[1:], nawiasy[0] + stos)
  26. # czy nawias pierwszy zamkniety
  27. elif czyZamkniety(nawiasy[0]):
  28. # czy stos nie pusty i czy uzgodnilo nawiasy i czy obciete nawiasy i stos pasuja
  29. return (len(stos) != 0) and czyPasuja(stos[0], nawiasy[0]) and czyNawiasyPasuja(nawiasy[1:], stos[1:])
  30. else:
  31. # inaczej gdy napotka inny znak szuka dalej
  32. return czyNawiasyPasuja(nawiasy[1:], stos)
  33.  
  34. testy = ['([()]())()', '(()[()])()', '(()())[()]', '([()()])()', '[(()())]()', '[(()())()]']
  35. for test in testy:
  36. print(test + ' = ' + str(czyNawiasyPasuja(test, '')))
  37.  
  38. '''
  39. test = '([()]())()'
  40.  
  41. czyNawiasyPasuja('([()]())()', '')
  42. czyOtwarty('(')
  43. czyNawiasyPasuja('[()]())()', '(')
  44. czyOtwarty('[')
  45. czyNawiasyPasuja('()]())()', '[(')
  46. czyOtwarty('(')
  47. czyNawiasyPasuja(')]())()', '([(')
  48. czyZamkniety(')')
  49. czyNawiasyPasuja(']())()', '[(')
  50. czyZamkniety(']')
  51. czyNawiasyPasuja('())()', '(')
  52. czyOtwarty('(')
  53. czyNawiasyPasuja('))()', '((')
  54. czyZamkniety(')')
  55. czyNawiasyPasuja(')()', '(')
  56. czyZamkniety(')')
  57. czyNawiasyPasuja('()', '')
  58. czyOtwarty('(')
  59. czyNawiasyPasuja(')', '(')
  60. czyZamkniety(')')
  61. czyNawiasyPasuja('', '')
  62. '' == 0
  63. True
  64. True
  65. True
  66. True
  67. True
  68. True
  69. True
  70. True
  71. True
  72. True
  73. True
  74. '''
Success #stdin #stdout 0.03s 9984KB
stdin
Standard input is empty
stdout
([()]())() = True
(()[()])() = True
(()())[()] = True
([()()])() = True
[(()())]() = True
[(()())()] = True