From: "Vasil Vangelovski" <vvangelovski@gmail.com>
Date: December 5, 2007 10:48:56 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
# Just made the code more readable
# Also made the String#number? method more tidy
# I think this solution satisfies all criteriaclass 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?
#just regex
#most likely faster
#than exception handling
match = /\b[0-9]+([.]{1}[0-9]+){0,1}\b/.match(self)
if match.nil?
return false
else
return match[0]==self
end
endend
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
exp = "#{string_bottom}#{token}#{string_top}"
exp = '('+exp+')' if (token =='+')||(token=='-')
stack.push(exp)
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
if ((infix[0]==40)&&(infix[infix.size-1]==41))
infix = infix[1..(infix.size-2)]
end
puts infix
···
Begin forwarded message: