# Forum: Ruby Calculating single-digit summands

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
on 2005-12-11 23:00
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 01:24
On 11 Dec 2005 13:53:28 -0800, "draq" <boyang.xia@gmail.com> 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:

I don't understand the rules of the game from your writeup.
on 2005-12-12 03: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:

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

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 Gray II
on 2005-12-12 04: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
This topic is locked and can not be replied to.