Begin forwarded message:

> From: "Vasil Vangelovski" <vvangelovski / gmail.com>
> Date: December 5, 2007 7:55:12 AM CST
> To: submission / rubyquiz.com
> Subject: Please Forward: Ruby Quiz Submission
>
> #!/usr/bin/env ruby
> #
> #  Created by Vasil Vangelovski on 2007-12-05.
> #  Copyright (c) 2007. All rights reserved.
> #
> # Solution for ruby quiz 148
> # Thanx for posting something that can be solved on coffee-breaks
>
> class String
>
>  #checks if the string is an operator
>  def op?
>    return (self=='+')||(self=='-')||(self=='*')||(self=='/');
>  end
>
>  #returns true only for strings that represent integer or decimal  
> numbers
>  def number?
>    #there's a way to simplify this!!! (maybe later)
>    int = false
>    dec = false
>    int = (/[0-9]+/.match(self)[0]  == self) if !/ 
> [0-9]+/.match(self).nil?
>    dec =(/[0-9]+[.]{0,1}[0-9]+/.match(self)[0] == self) if
> !/[0-9]+[.]{0,1}[0-9]+/.match(self).nil?
>    return int||dec
>  end
>
> end
>
> postfix_exp=ARGV[0]
> tokens = postfix_exp.split(' ')
>
> #the postfix->infix algo goes like this
> stack = []
> tokens.each {|token|
>  if token.number?
>    stack.push(token)
>  elsif token.op?
>    string_top = stack.pop
>    string_bottom = stack.pop
>    #simple logic regarding operator precedence
>    stack.push("(#{string_bottom}#{token}#{string_top})") if (token
> =='+')||(token=='-')
>    stack.push("#{string_bottom}#{token}#{string_top}") if (token
> =='*')||(token=='/')
>  else
>    #if it's not a number nor operator it's no valid
>    puts "Invalid input!"
>    exit(1)
>  end
> }
>
> infix = stack.to_s
> #remove trailing and leading parenthesis if any
> infix = infix[1..(infix.size-2)] if  
> ((infix[0]==40)&&(infix[infix.size-1]==41))
> puts infix