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