Velocity Reviews > Ruby > Help on algorithm to calculate combinations

# Help on algorithm to calculate combinations

Alexander Antonakakis
Guest
Posts: n/a

 02-25-2010
Hello all
I would like to find an algorithm to caclulate all options on the
following problem.
Lets suppose we have a room of max capacity of 4 persons.
Which are the combinations of man - child in this room?
some of them will be:
empty room (none inside)
1 man
1 child
2 men
2 children
2 men 1 children
2 men 2 children

Thomas Preymesser
Guest
Posts: n/a

 02-25-2010
[Note: parts of this message were removed to make it a legal post.]

On 25 February 2010 09:40, Alexander Antonakakis <(E-Mail Removed)> wrote:

> Hello all
> I would like to find an algorithm to caclulate all options on the
> following problem.
> Lets suppose we have a room of max capacity of 4 persons.
> Which are the combinations of man - child in this room?
>

0 children / 0 men
0 children / 1 men
0 children / 2 men
0 children / 3 men
0 children / 4 men
1 children / 0 men
1 children / 1 men
1 children / 2 men
1 children / 3 men
2 children / 0 men
2 children / 1 men
2 children / 2 men
3 children / 0 men
3 children / 1 men
4 children / 0 men

--
Thomas Preymesser
http://www.velocityreviews.com/forums/(E-Mail Removed)
http://thopre.wordpress.com/

Alexander Antonakakis
Guest
Posts: n/a

 02-25-2010
Thomas Preymesser wrote:
> On 25 February 2010 09:40, Alexander Antonakakis <(E-Mail Removed)>
> wrote:
>
>> Hello all
>> I would like to find an algorithm to caclulate all options on the
>> following problem.
>> Lets suppose we have a room of max capacity of 4 persons.
>> Which are the combinations of man - child in this room?
>>

>
> 0 children / 0 men
> 0 children / 1 men
> 0 children / 2 men
> 0 children / 3 men
> 0 children / 4 men
> 1 children / 0 men
> 1 children / 1 men
> 1 children / 2 men
> 1 children / 3 men
> 2 children / 0 men
> 2 children / 1 men
> 2 children / 2 men
> 3 children / 0 men
> 3 children / 1 men

max = 4
@result = []
(0..max).each do |x|
(0..(max - x)).each do |y|
@combination = []
x.times { @combination << "children" }
y.times { @combination << "men" }
@result << @combination
end
end

Thank you very much
> 4 children / 0 men

--
Posted via http://www.ruby-forum.com/.

Giampiero Zanchi
Guest
Posts: n/a

 02-25-2010

> max = 4
> @result = []
> (0..max).each do |x|
> (0..(max - x)).each do |y|
> @combination = []
> x.times { @combination << "children" }
> y.times { @combination << "men" }
> @result << @combination
> end
> end
>
> Thank you very much
>> 4 children / 0 men

it doesn't produce 1 children (for instance)

results = []
0.upto(4) do |n|
0.upto(2**n - 1) do |i|
s = i.to_s(2).rjust(n,'0').split('').sort.join
results << s unless results.include?(s)
end
end

p results.map! {|e| e.tr('01','cm')}

--
Posted via http://www.ruby-forum.com/.

Alexander Antonakakis
Guest
Posts: n/a

 02-25-2010
Giampiero Zanchi wrote:
> it doesn't produce 1 children (for instance)
>
> results = []
> 0.upto(4) do |n|
> 0.upto(2**n - 1) do |i|
> s = i.to_s(2).rjust(n,'0').split('').sort.join
> results << s unless results.include?(s)
> end
> end
>
> p results.map! {|e| e.tr('01','cm')}

It produces the 1 children option plus the empty room one. We have the
same results 14 for you that don't iclure the empty room combination and
15 for me with the empty room.
--
Posted via http://www.ruby-forum.com/.

Josh Cheek
Guest
Posts: n/a

 02-25-2010
[Note: parts of this message were removed to make it a legal post.]

Sorry, computer lagged and I hit 'send' rather than clicking in the window
to edit.

Here is a solution I meant to post, which has the correct inflections
http://pastie.org/842110

def people_in_room(occupants)
for men in 0..occupants
for children in 0..occupants - men
yield men , children
end
end
end

puts "in a room with 4 people, you could occupy it in the following ways:"
people_in_room 4 do |men,children|
to_print = Array.new
to_print << "#{men} #{ men == 1 ? 'man' : 'men' }" unless
men.zero?
to_print << "#{children} #{ children == 1 ? 'child' : 'children' }" unless
children.zero?
puts to_print.join(' ')
end

Josh Cheek
Guest
Posts: n/a

 02-25-2010
[Note: parts of this message were removed to make it a legal post.]

On Thu, Feb 25, 2010 at 2:40 AM, Alexander Antonakakis <(E-Mail Removed)>wrote:

> Hello all
> I would like to find an algorithm to caclulate all options on the
> following problem.
> Lets suppose we have a room of max capacity of 4 persons.
> Which are the combinations of man - child in this room?
> some of them will be:
> empty room (none inside)
> 1 man
> 1 child
> 2 men
> 2 children
> 2 men 1 children
> 2 men 2 children
> .
> .
> 4 men
> 4 children
>
> --
> Posted via http://www.ruby-forum.com/.
>
>

def people_in_room(occupants)
for men in 0..occupants
for children in 0..occupants - men
yield men , children
end
end
end

puts "in a room with 4 people, you could occupy it in the following ways:"
people_in_room 4 do |men,children|
puts "men: #{men} , children: #{children}"
end

Alexander Antonakakis
Guest
Posts: n/a

 02-25-2010
Josh Cheek wrote:
> Sorry, computer lagged and I hit 'send' rather than clicking in the
> window
> to edit.

Thanks Josh
--
Posted via http://www.ruby-forum.com/.

Josh Cheek
Guest
Posts: n/a

 02-25-2010
[Note: parts of this message were removed to make it a legal post.]

On Thu, Feb 25, 2010 at 6:43 AM, Alexander Antonakakis <(E-Mail Removed)>wrote:

> Josh Cheek wrote:
> > Sorry, computer lagged and I hit 'send' rather than clicking in the
> > window
> > to edit.

>
> Thanks Josh
> --
> Posted via http://www.ruby-forum.com/.
>
>

lol, you're welcome. But I just saw that it prints an empty line for the
empty room. That's what I get for not testing. Try adding this line to the
beginning of the block:
next( puts "empty room" ) if men.zero? && children.zero?