Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.88 KB | None | 0 0
  1. # coding: utf-8
  2. def getPriority op
  3. case op
  4. when '('
  5. 5
  6. when '0'..'9'
  7. 4
  8. when '*', '/'
  9. 3
  10. when '+', '-'
  11. 2
  12. when ')', nil
  13. 1
  14. end
  15. end
  16.  
  17. def rpn exp
  18. stack = []
  19. result = []
  20. stack.push(nil)
  21. i = 0
  22. # 演算要素をスタックからポップし、返還後配列の末尾に追加する。
  23. while i < exp.size
  24. elementPriority = getPriority(exp[i])
  25. stackTop = stack.last
  26. while getPriority(stackTop) >= elementPriority && stackTop != '('
  27. result << stack.pop
  28. stackTop = stack.last
  29. end
  30. # 返還前配列を参照し、演算処理をする。
  31. if exp[i] == ')'
  32. stack.pop
  33. else
  34. stack.push(exp[i])
  35. end
  36. i += 1
  37. end
  38. # スタックに残った演算要素を、返還後配列の末尾に追加する。
  39. while stack.last != nil
  40. result << stack.pop
  41. end
  42. result.join(' ')
  43. end
  44.  
  45. puts rpn '1+2*3'
  46. puts rpn '(2+3)*4'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement