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.
draq (Guest)
on 2005-12-12 00:00
(Received via mailing list)
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
Ron J. (Guest)
on 2005-12-12 02:24
(Received via mailing list)
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.
James G. (Guest)
on 2005-12-12 04:51
(Received via mailing list)
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
Dan D. (Guest)
on 2005-12-12 05:39
(Received via mailing list)
># ... 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.