remove rpn test
This commit is contained in:
parent
c82cfc3b0b
commit
7b72e87df5
91
rpn_test
91
rpn_test
@ -1,91 +0,0 @@
|
||||
#!/usr/bin/ruby
|
||||
|
||||
def evalrpn(str)
|
||||
# puts "eval '#{str}'"
|
||||
s=[]
|
||||
str.split.each do|t|
|
||||
case t
|
||||
when /[0-9]/
|
||||
s+=[t.to_i]
|
||||
when /[-+\*\/]/
|
||||
i1=s.pop.to_i
|
||||
i2=s.pop.to_i
|
||||
r=0
|
||||
case t
|
||||
when '+'
|
||||
r=i2+i1
|
||||
when '-'
|
||||
r=i2-i1
|
||||
when '*'
|
||||
r=i2*i1
|
||||
when '/'
|
||||
r=i2/i1
|
||||
end
|
||||
s.push r
|
||||
end
|
||||
end
|
||||
|
||||
# puts "s: '#{s}'"
|
||||
# puts "o: '#{o}'"
|
||||
s.pop
|
||||
end
|
||||
|
||||
def i2r(str)
|
||||
# puts "i2r '#{str}'"
|
||||
pre={
|
||||
'(' => 5,
|
||||
')' => 5,
|
||||
'+' => 10,
|
||||
'-' => 10,
|
||||
'*' => 20,
|
||||
'/' => 20,
|
||||
}
|
||||
o=[]
|
||||
s=[]
|
||||
str.split.each do |t|
|
||||
case t
|
||||
when /[0-9]/
|
||||
s+=[t.to_i]
|
||||
when /[-+\*\/]/
|
||||
while o.size>0&&pre[o[-1]]>=pre[t]
|
||||
s.push o.pop
|
||||
end
|
||||
o+=[t]
|
||||
when '('
|
||||
o.push t
|
||||
when ')'
|
||||
while o[-1]!='('
|
||||
s.push o.pop
|
||||
end
|
||||
o.pop
|
||||
end
|
||||
end
|
||||
|
||||
while o.size>0
|
||||
s.push o.pop
|
||||
end
|
||||
|
||||
# puts "s: '#{s}'"
|
||||
# puts "o: '#{o}'"
|
||||
s.join' '
|
||||
end
|
||||
|
||||
def dotest(str)
|
||||
print "'#{str}' => "
|
||||
res=i2r str
|
||||
print "'#{res}' => "
|
||||
print "'#{evalrpn res}'\n"
|
||||
end
|
||||
|
||||
def main
|
||||
dotest '1 + 2 + 3'
|
||||
dotest '1 + 2 - 3'
|
||||
dotest '1 - 2 + 3'
|
||||
dotest '2 * 5 - 3'
|
||||
dotest '2 - 5 * 3'
|
||||
dotest '21 * 2 / 3'
|
||||
dotest '21 / 2 * 3'
|
||||
dotest '2 * ( 1 + 2 )'
|
||||
end
|
||||
|
||||
main
|
Loading…
Reference in New Issue
Block a user