Created
June 17, 2016 18:53
-
-
Save saroar/0818a369327b2174d7b356ba67a3a5f1 to your computer and use it in GitHub Desktop.
Polish Notation (RPN) Expression
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Тестовое задание | |
Для выполнения этого задания сделайте форк этого репозитория, и по готовности сделайте пулл реквест. Руби 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