Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.97 KB | None | 0 0
  1. package rpn
  2.  
  3. import (
  4. "stack"
  5. "strconv"
  6. "strings"
  7. )
  8.  
  9. var operators = map[string]func(int, int) int{
  10. "+": func(left int, right int) int { return left + right },
  11. "-": func(left int, right int) int { return left - right },
  12. "/": func(left int, right int) int { return left / right },
  13. "*": func(left int, right int) int { return left * right },
  14. }
  15.  
  16. /*
  17. Evaluate a postfix expression. The following operators are supported: + - * /
  18. */
  19. func Evaluate(input string) int {
  20. parts := strings.Split(input, " ")
  21. var s stack.Stack
  22.  
  23. for _, part := range parts {
  24. if operator, ok := operators[part]; ok {
  25. right := s.Pop()
  26. left := s.Pop()
  27. s.Push(operator(left, right))
  28. } else if number, err := strconv.Atoi(part); err == nil {
  29. s.Push(number)
  30. } else {
  31. panic("Didn't recognize input.")
  32. }
  33. }
  34.  
  35. if s.Size() != 1 {
  36. panic("Unbalanced expression!")
  37. }
  38.  
  39. return s.Pop()
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement