```------art_48592_12496891.1216000183615
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Here's a fairly straightforward solution, this passes the tests and works
for both positive and negative integers:

def symbolify(i)
digits
"?(-?(",
"?)-?(",
"?*-?(",
"?--?*",
"(?*-?()*(?*-?()",
"?--?(",
"(?--?*)*(?*-?()",
"(((?*-?()*(?*-?())*(?*-?())-(?)-?()",
"((?*-?()*(?*-?())*(?*-?()",
"((?*-?()*(?--?())-(?)-?()",
"(?*-?()*(?--?()"
]

if i < 0
"-(#{symbolify(-i)})"
else
if i < 9
digits[i]
else
i.abs.to_s.split(//).map {|digit| digits[digit.to_i]}.inject(nil) {
end
end
end

The basic approach is to generate an expression which works like a lexical
scan of the decimal representation of the (positive) integer, i.e. it's the
closed form of

val
i.to_s(10).split(//).each |digit|
val  al * 10 + digit.to_i
end

except the the digits are represented by expressions following the rules.

For the positive integers < 000 the longest string generated was  157
characters for i  77.

For the negative integers > 000 the longest string generate was 160
characters for i  777 (i.e) the same string wrapped in parentheses
preceded by a -
--
Rick DeNatale

My blog on Ruby