Skip to content

Instantly share code, notes, and snippets.

@kennyt
Created October 27, 2012 09:46
Show Gist options
  • Save kennyt/3963803 to your computer and use it in GitHub Desktop.
Save kennyt/3963803 to your computer and use it in GitHub Desktop.
12_rpn_calculator
class RPNCalculator
attr_accessor :calculator
def initialize
@calculator = []
end
def push (number)
@calculator << number
end
def value
@calculator.last
end
def plus
if @calculator == []
raise 'calculator is empty'
end
number1 = @calculator.pop
number2 = @calculator.pop
new_number = number1 + number2
@calculator << new_number
end
def minus
if @calculator == []
raise 'calculator is empty'
end
number1 = @calculator.pop
number2 = @calculator.pop
new_number = number1 - number2
@calculator << new_number
end
def divide
if @calculator == []
raise 'calculator is empty'
end
number1 = @calculator.pop
number2 = @calculator.pop
new_number = number1.to_f / number2
@calculator << new_number
end
def times
if @calculator == []
raise 'calculator is empty'
end
number1 = @calculator.pop
number2 = @calculator.pop
new_number = number1 * number2
@calculator << new_number
end
def tokens (string)
string.split(' ').each do | z |
if z == "*"
@calculator<<:*
elsif z == "-"
@calculator<<:-
elsif z == "+"
@calculator<<:+
elsif z == "/"
@calculator<<:/
else
@calculator<<z.to_i
end
end
@calculator
end
def evaluate (string)
string.split(' ').each do | z |
z.to_i == 0 ? z : z = z.to_i
if z == "*"
@calculator << @calculator.pop * @calculator.pop
elsif z == "-"
@calculator << @calculator.pop - @calculator.pop
elsif z == "+"
@calculator << @calculator.pop + @calculator.pop
elsif z == "/"
@calculator << @calculator.pop.to_f / @calculator.pop
else
@calculator << z
end
end
@calculator.last
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment