Skip to content

Instantly share code, notes, and snippets.

@saroar
Created June 17, 2016 18:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save saroar/0818a369327b2174d7b356ba67a3a5f1 to your computer and use it in GitHub Desktop.
Save saroar/0818a369327b2174d7b356ba67a3a5f1 to your computer and use it in GitHub Desktop.
Polish Notation (RPN) Expression
# Тестовое задание
Для выполнения этого задания сделайте форк этого репозитория, и по готовности сделайте пулл реквест. Руби 2.2 и только std-lib
## Вычисление выражения в обратной польской записи
Написать программу, которая вычисляет выражения в обратной польской нотации.
Например, если на вход ей дать выражение 5 1 2 + 4 * + 3 - (что эквивалентно 5 + ((1 + 2) * 4) - 3 в нормальной записи), то она даст ответ 14. Валидными операциями являются +, -, \*, /, ^.
Если передано пустое выражение, программа возвращает 0.
Программая должна выполняться из консоли и печатать ответ в stdout, например:
```
$ ruby calc_polish_notation.rb 5 1 2 + 4 * + 3 -
14
```
class CalcPolishNotaion
def evaluate(expression)
expression = expression.split
operands = []
evaluation = []
expression.each do |e|
case e
when /\d/
evaluation.push(e.to_i)
when "-","/","*","+","**"
operands = evaluation.pop(2)
evaluation.push(operands[0].send(e, operands[1]))
end
end
puts evaluation
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment