# Fwd: Please Forward: Ruby Quiz Submission

**URL:** <https://www.ruby-forum.com/t/fwd-please-forward-ruby-quiz-submission/229123>\
**Category:** Ruby\
**Created:** [December 5, 2007, 5:54pm UTC](https://www.ruby-forum.com/t/fwd-please-forward-ruby-quiz-submission/229123 "2007-12-05T17:54:41Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![bbazzarrakk](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/47e85d/32.png) [@bbazzarrakk](https://www.ruby-forum.com/u/bbazzarrakk)\
**Post date:** [December 5, 2007, 5:54pm UTC](https://www.ruby-forum.com/t/fwd-please-forward-ruby-quiz-submission/229123/1 "2007-12-05T17:54:41Z")

</div>

Begin forwarded message:

---

<div class="post-metadata">

**Author:** ![bbazzarrakk](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/47e85d/32.png) [@bbazzarrakk](https://www.ruby-forum.com/u/bbazzarrakk)\
**Post date:** [December 6, 2007, 12:31pm UTC](https://www.ruby-forum.com/t/fwd-please-forward-ruby-quiz-submission/229123/2 "2007-12-06T12:31:16Z")

</div>

#!/usr/bin/env ruby

# 

# Created by Vasil V. on 2007-12-05.

# Copyright © 2007. All rights reserved.

# 

# Solution for ruby quiz 148

# Fixed a bug that occured with some expressions

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?  
#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  
end

end

def post\_inf(expr)

tokens = expr.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 precedance  
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  
}  
return stack.to\_s  
end

puts post\_inf(ARGV[0])

#Some test output  
post\_inf(‘56 34 213.7 + \* 678 -’) # =\> “(56\*(34+213.7)-678)”  
post\_inf(‘1 56 35 + 16 9 - / +’) # =\> “(1+(56+35)/(16-9))”  
post\_inf(‘43.55 3.2 + 23 5 - /’) # =\> “(43.55+3.2)/(23-5)”
