[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Fwd: Please Forward: Ruby Quiz Submission (#148

James Gray

12/4/2007 1:58:00 PM

Begin forwarded message:

> From: "Jim Truher" <jtruher@gmail.com>
> Date: December 4, 2007 12:56:13 AM CST
> To: submission@rubyquiz.com
> Subject: Please Forward: Ruby Quiz Submission (#148)
>
> Good quiz this week, I had time to do it! Looks like I wasn't the
> only one, either. Some reasonably graceful error handling if your
> operator/operand count is off.
>
> #Ruby quiz #148
> require 'pp'
>
> class Quiz148
>
> def initialize(str)
> @regexed_string = str.scan(/\d+\.\d*|[-*+\/]|\d*/)
> @regexed_string.reject! {|i| i == "" }
> @num_stack = []
>
> postfix_to_infix
> end
>
> def postfix_to_infix
> @regexed_string.each do |c|
> case c
> when "*"
> if check_validity
> one,two = eval_parens(@num_stack.pop), @num_stack.pop
> @num_stack.push(two + c +one)
> end
> when "/"
> if check_validity
> one,two = eval_parens(@num_stack.pop), eval_parens
> (@num_stack.pop)
> @num_stack.push(two + c +one)
> end
> when "+", "-"
> if check_validity
> one,two = @num_stack.pop, @num_stack.pop
> @num_stack.push(two + c + one)
> end
> else # - we've got a number!
> @num_stack.push(c)
> end # - case c
> end # - @regexed_string.each do |c|
> end
>
> def eval_parens(str)
> if (str.include? "*") || (str.include? "+") || (str.include?
> "-") || (str.include? "/")
> "(" + str + ")"
> else
> str
> end
> end
>
> def check_validity
> if @num_stack.size == 1
> puts "Oh no, looks like your expression has too many
> operators?! Breaking early!"
> return false
> end
> return true
> end
>
> def to_s
> if @num_stack.size > 1
> puts "Looks like your expression has too many operands :
> ( Gonna just print what we've got"
> end
> @num_stack.first.to_s
> end
> end
> #A few tests!
> if ARGV[0]
> puts Quiz148.new(ARGV[0]).to_s
> end
> puts Quiz148.new("56 34 213.7 + * 678 - +").to_s
> puts Quiz148.new("3 5 * 5 8 * /").to_s
> puts Quiz148.new("3 5 * 5 ").to_s