class Algorithmable::Puzzles::DijkstrasTwoStacks
Constants
- ARITHMETICAL_OPS
- CLOSE_EXP
- MATH_OPS
- OPEN_EXP
- OPS
Public Class Methods
new(expression)
click to toggle source
# File lib/algorithmable/puzzles/dijkstras_two_stacks.rb, line 12 def initialize(expression) @expression = expression end
Public Instance Methods
solve()
click to toggle source
# File lib/algorithmable/puzzles/dijkstras_two_stacks.rb, line 16 def solve operations = new_lifo_queue values = new_lifo_queue parse_expression(operations, values) values.pop end
Private Instance Methods
compute(operation, value, values_stack)
click to toggle source
# File lib/algorithmable/puzzles/dijkstras_two_stacks.rb, line 41 def compute(operation, value, values_stack) if MATH_OPS.include? operation values_stack.push Math.send(operation, value) else values_stack.push values_stack.pop.send(operation, value) end end
parse_expression(operations, values)
click to toggle source
# File lib/algorithmable/puzzles/dijkstras_two_stacks.rb, line 25 def parse_expression(operations, values) @expression.split.each do |char| if OPEN_EXP == char # noop elsif OPS.include?(char) operations.push char elsif CLOSE_EXP == char operation = operations.pop value = values.pop compute operation, value, values else values.push Float(char) end end end