I have tried to make an algorithm that finds all possible combinations of single-digit summands for a number. After an afternoon of hard and desperate work I got something inefficient (although it works). Maybe someone has a better idea. The link to the algorithm: http://secam.blogspot.com/2005/12/solving-kakuro-part-i.html

on 2005-12-12 00:00

on 2005-12-12 02:24

On 11 Dec 2005 13:53:28 -0800, "draq" <removed_email_address@domain.invalid> wrote: >I have tried to make an algorithm that finds all possible combinations >of single-digit summands for a number. After an afternoon of hard and >desperate work I got something inefficient (although it works). Maybe >someone has a better idea. The link to the algorithm: >http://secam.blogspot.com/2005/12/solving-kakuro-part-i.html I don't understand the rules of the game from your writeup.

on 2005-12-12 04:51

On Dec 11, 2005, at 3:57 PM, draq wrote: > I have tried to make an algorithm that finds all possible combinations > of single-digit summands for a number. After an afternoon of hard and > desperate work I got something inefficient (although it works). Maybe > someone has a better idea. The link to the algorithm: > http://secam.blogspot.com/2005/12/solving-kakuro-part-i.html One thing that your code could really use is better names. Variables like "arr", "t", and even "calc" tell me very little, as I'm trying to read you code. Next, there's a lot more iterators than just each() and using them can make your code more expressive. Some examples: def sum (arr) i = 0 arr.each do |k| i += k end i end # ... or ... def sum( enum ) inject { |sum, n| sum + n } end ###### arrj.each do |a| arri.delete(a) if sum(a) != number end # ... or ... arrj.delete_if { |a| sum(a) != number } You can also simplify lines like the following by using destructive method calls: arri = arri.uniq # ... or ... arri.uniq! Hope that gives you some ideas. James Edward G. II

on 2005-12-12 05:39

># ... or ... >def sum( enum ) > inject { |sum, n| sum + n } >end Don't you need enum. ? def sum(enum) enum.inject {|sum,n| sum+n} end