$ops = "+-*/&^|%".chars + ["<<", ">>"]
def generateTree(m, s="5", i=0)
if i == m then
return s
end
l = [s]
$ops.each {|e|
l.push generateTree(m, s + e + "5", i + 1)
}
l
end
def getOptimal(n, m=6, tree=nil)
if tree == nil then
tree = generateTree(m)
end
for x in tree
if x.kind_of? String and eval(x) == n then
return x
end
if x.kind_of? Array then
return getOptimal(n, m, x)
end
end