遠い世界の数式
解いてみた。
まず最初に考えたもの。結構強引。
問題は最後の5問だけ。
class Fixnum def -(x) self | x end def ^(x) self + x end def >(x) self * x end end DATA.each do |expr| p eval(expr.gsub(/[\|\+\*]/, {'|'=>'-', '+'=>'^', '*'=>'>'})) end __END__ 13&84&43*6+77|56+59|15&24+9*66 928&728*151+695&321*369|845+771 5984|86*8519&43184&7183+401*48|6629+97|852 217|999&112+511+357+514&98*796|718*715|442&682 461&424&462+557+855|656|924*234*557&451*884|322
こっちは優先順位に従って地道に式変形していく方法。
def f(e, op) e.sub!(/\d+#{Regexp.quote(op)}\d+/) {|t| eval(t).to_s} while e.index(op) end DATA.each do |expr| print %w(| & + *).each_with_object(expr) {|op, e| f(e, op)} end __END__ 13&84&43*6+77|56+59|15&24+9*66 928&728*151+695&321*369|845+771 5984|86*8519&43184&7183+401*48|6629+97|852 217|999&112+511+357+514&98*796|718*715|442&682 461&424&462+557+855|656|924*234*557&451*884|322