(forwarded to Ruby Talk by JEG2)
···
Begin forwarded message:
From: Junghyun Kim <ikspres@gmail.com>
Date: November 16, 2004 5:46:59 AM CST
To: rubyquiz@grayproductions.net
Subject: [SOLUTION] RubyQuiz #7
Reply-To: Junghyun Kim <ikspres@gmail.com>Hi.
I am Junghyun Kim,
Here is my solution for rubyquiz #7
I used recursion, it's very simple but brute force method.Thanks for the interesting quiz.
## Code Begin##
def f(target, values)
return 0,"0" if values.nil? or values.length == 0
return (target-values[0]).abs, "#{values[0]}" if values.length == 1mgap,mexpr = 1000, " "
for i in 0 ... values.length
values2 = Array.new(values)
value = values2.delete_at(i)# For +
gap, expr = f(target - value, values2)
mgap,mexpr=gap, "#{expr}+#{value}" if gap <mgap
break if mgap == 0# For -
gap,expr = f(value-target, values2)
mgap,mexpr=gap, "#{value}-#{expr}" if gap <mgap
break if mgap == 0gap,expr = f(target+value, values2)
mgap,mexpr=gap, "#{expr}-#{value}" if gap <mgap
break if mgap == 0#For *
if value != 0
gap,expr = f(target/value, values2)
mgap,mexpr=gap, "(#{expr})*#{value}" if gap <mgap
break if mgap == 0
end# For /
if target != 0
gap,expr = f(value/target, values2)
mgap,mexpr=gap, "#{value}/(#{expr})" if gap <mgap
break if mgap == 0
endgap,expr = f(target*value, values2)
mgap,mexpr=gap, "(#{expr})/#{value}" if gap <mgap
break if mgap == 0end
return mgap, mexpr
enddef countDown(target, values)
gap,expr = f(target.to_f, values.collect {|v| v.to_f})
print "gap = #{gap}\n"
print "expr = ",expr,"\n"
end#sample
countDown(900, [25, 1,2,3,4,5])## Code End##