From: Ken Bloom Date: 2007-12-03T13:40:02+09:00 Subject: Re: Fwd: Ruby Quiz #148 On Sun, 02 Dec 2007 21:47:29 -0500, Dave Pederson wrote: > Note: parts of this message were removed by the gateway to make it a > legal Usenet post. > > Solution to quiz #148. > Thanks, > > -Dave > ---------- Forwarded message ---------- From: Dave Pederson > Date: Nov 30, 2007 7:26 PM > Subject: Ruby Quiz #148 > To: dave.pederson.ruby@gmail.com > > > #!/usr/bin/env ruby > > op = %w{ + - / * } > pm = %w{ + - } > > postfixes = ["2 3 5 + *", > "1 56 35 + 16 9 - / +", > "56 34 213.7 + * 678 -", > "5 9 * 8 7 4 6 + * 2 1 3 * + * + *"] > > puts > postfixes.each do |postfix| > stack = [] > postfix.split.each do |c| > if op.include?(c) > second, first = stack.pop, stack.pop > if pm.include?(c) > stack.push "(#{first} #{c} #{second})" > else > stack.push "#{first} #{c} #{second}" > end > else > stack.push(c) > end > end > infix = stack.pop > if (infix[0] == 40 && infix[infix.size-1] == 41) > infix = infix[1, infix.size-2] > end > puts "postfix = #{postfix}" > puts "infix = #{infix}" > puts > end This is incorrect: postfix = 3 5 * 5 8 * / infix = 3 * 5 / 5 * 8 It should be infix = 3 * 5 / (5 * 8) --Ken -- Ken (Chanoch) Bloom. PhD candidate. Linguistic Cognition Laboratory. Department of Computer Science. Illinois Institute of Technology. http://www.iit.edu/~kbloom1/