Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package rpn
- import (
- "stack"
- "strconv"
- "strings"
- )
- var operators = map[string]func(int, int) int{
- "+": func(left int, right int) int { return left + right },
- "-": func(left int, right int) int { return left - right },
- "/": func(left int, right int) int { return left / right },
- "*": func(left int, right int) int { return left * right },
- }
- /*
- Evaluate a postfix expression. The following operators are supported: + - * /
- */
- func Evaluate(input string) int {
- parts := strings.Split(input, " ")
- var s stack.Stack
- for _, part := range parts {
- if operator, ok := operators[part]; ok {
- right := s.Pop()
- left := s.Pop()
- s.Push(operator(left, right))
- } else if number, err := strconv.Atoi(part); err == nil {
- s.Push(number)
- } else {
- panic("Didn't recognize input.")
- }
- }
- if s.Size() != 1 {
- panic("Unbalanced expression!")
- }
- return s.Pop()
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement