gmo61520

Untitled

Jun 6th, 2016
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.53 KB | None | 0 0
  1. class InputParser:
  2. def __init__(self, data):
  3. self._data = data
  4. self._pos = -1
  5. self._next = None
  6.  
  7. def lex(self):
  8. if self._next != None:
  9. result = self._next
  10. self._next = None
  11. return result
  12. self._pos = self._pos + 1
  13. c = self._data[self._pos]
  14. if c == '(' or c == ')' or c == None:
  15. return c
  16. d = '0123456789'
  17. v = d.find(c)
  18. while True:
  19. i = d.find(self._data[self._pos + 1])
  20. if i == -1:
  21. break
  22. v = v * 10 + i
  23. self._pos = self._pos + 1
  24. return v
  25.  
  26. def lookahead(self):
  27. if self._next == None:
  28. self._next = self.lex()
  29. return self._next
  30.  
  31. result = 0
  32. def read_and_sum(parser):
  33. global result
  34. if parser.lex() != '(':
  35. raise SyntaxError('Expected: "("')
  36. l = parser.lookahead()
  37. if l == '(':
  38. left = read_and_sum(parser)
  39. l = parser.lex()
  40. else:
  41. parser.lex()
  42. left = None
  43. if type(l) is int:
  44. key = l
  45. else:
  46. raise SyntaxError('Expected: number')
  47. l = parser.lookahead()
  48. if l == ')':
  49. right = None
  50. else:
  51. right = read_and_sum(parser)
  52. if parser.lex() != ')':
  53. raise SyntaxError('Expected: ")"')
  54. if (left == None or left < key) and (right == None or right > key):
  55. result = result + 1
  56. return key
  57.  
  58. parser = InputParser(input())
  59. read_and_sum(parser)
  60. print(result)
Advertisement
Add Comment
Please, Sign In to add comment