- 入力
- 逆ポーランド記法で書いた四則演算
- 出力
- 計算結果
以下にコードを示す
#!/usr/bin/ruby # 1行の逆ポーランド記法を突っ込むと # 計算して結果を出力するプログラム # 計算は、四則演算 print "input: " queue = [] stack = [] queue = gets.split(" ").map do |i| if i.to_i.to_s == i i.to_i else i end end while queue.length > 0 token = queue.shift if token.class.name == "Fixnum" # トークンがオペランドのとき stack.push token else # トークンがオペレータのとき if stack.length < 2 print "syntax error\n" exit -1 end op=stack.pop if token == "+" stack.push stack.pop + op elsif token == "-" stack.push stack.pop - op elsif token == "*" stack.push stack.pop * op elsif token == "/" stack.push stack.pop / op end end end # 入力トークン列の長さが0かつスタックの長さが1なら終了 if stack.length == 1 print stack[0] else print "error" end print "\n"
トークンがオペレータのときの操作が泥臭い。もっとすっきり書けないかな?
あと、オペランドかオペレータかの判定も気持ち悪い。
言い出すとキリがないが、入力文字列の解析部分も気持ち悪い。