Hi, I read this xkcd strip the other day (http://www.xkcd.com/c287.html) and, of course, had to solve it. So I whipped up a quick bit of Ruby code that gave me the answers. Took about 5 minutes and then I was happy. Except I wasn't, because I looked at what I'd written. Ugly and not dry at all, sopping wet even; basically six nested loops. I'll try to reproduce it below. Trouble is, I then spend the best part of an afternoon (don't tell my boss ;-) trying to solve it elegantly, but couldn't. I did come up with other ways that worked, but they were pretty cumbersome and slow. There has to be a 'ruby way' to do this. Any suggestions? Cheers, Dave here's a rough approximation of the code I wrote: menu= [2.15, 2.75, 3.35, 3.55, 4.20, 5.80] target= 15.05 0.upto(target/menu[0].to_i) do |a| 0.upto(target/menu[1].to_i) do |b| 0.upto(target/menu[2].to_i) do |c| 0.upto(target/menu[3].to_i) do |d| 0.upto(target/menu[4].to_i) do |e| 0.upto(target/menu[5].to_i) do |f| if ((total= a*menu[0] + b*menu[1] + c*menu[2] + d*menu[3] + e*menu[4] + f*menu[5]) - target).abs<0.01 then puts "\n#{a} * $#{menu[0]}" puts "#{b} * $#{menu[1]}" puts "#{c} * $#{menu[2]}" puts "#{d} * $#{menu[3]}" puts "#{e} * $#{menu[4]}" puts "#{f} * $#{menu[5]}" puts "---------------\n $#{total}" end end end end end end end