Begin forwarded message:

> From: "Aaron Suggs" <aaron / zenbe.com>
> Date: December 5, 2007 11:45:50 PM CST
> To: submission / rubyquiz.com
> Subject: Re: Please Forward: Ruby Quiz Submission
>
> It seems that people usually submit answers inline, rather than as
> attachments. Here's my solution inline, if that's more convenient than
> an attachment:
>
> # Ruby Quiz #148: Postfix to Infix
> # http://www.rubyquiz.com/quiz148.html
> #
> # Solution by Aaron Suggs, aaron / zenbe.com
>
> # Some elementary arithmetic conventions
> ORDER_OF_OPERATORS = {
>  '+'  => 0,
>  '-'  => 0,
>  '/'  => 1,
>  '*'  => 1,
>  '^'  => 2, # Ooh, exponentiation
>  '**' => 2
> }
>
> # Recursive infixer
> # Takes a stack (array), and order of its parent operator (Fixnum);
> # returns string of infix expression
> def r_infix(stack, parent_order)
>  term = stack.pop
>  if term =~ /\d/
>    term.to_s
>  else
>    order = ORDER_OF_OPERATORS[term]
>    # To preserve order of terms, compute right side before left
>    right, left = r_infix(stack, order), r_infix(stack, order)
>    str = "#{left} #{term} #{right}"
>    order < parent_order ? "(#{str})" : str # add parens if needed
>  end
> end
>
>
> begin
>  # Get the postfix stack from ARGV
>  stack = ARGV.first.split(/\s+/)
>  # Converts postfix string to infix w/ minimal parentheses
>  result = r_infix(stack, -1)
>  raise("Stack not empty") unless stack.empty?
>  puts result
> rescue
>  puts "Malformed postfix expression"
> end
>
>
> Cheers,
> Aaron
>
> On Dec 6, 2007 12:24 AM, Aaron Suggs <aaron / zenbe.com> wrote:
>> Hi there,
>>
>> This is my first Ruby quiz submission. I'd appreciate it if you
>> forward it on to the list.
>>
>> Thanks for organizing these quizzes! They're a lot of fun.
>>
>> Cheers,
>> Aaron Suggs
>>