Help on algorithm to calculate combinations

  • Thread starter Alexander Antonakakis
  • Start date
A

Alexander Antonakakis

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
 
T

Thomas Preymesser

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

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
 
A

Alexander Antonakakis

Thomas said:
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
 
G

Giampiero Zanchi

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')}
 
A

Alexander Antonakakis

Giampiero said:
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.
 
J

Josh Cheek

[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
 
J

Josh Cheek

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

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

I appreciate your help
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
 
J

Josh Cheek

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

Thanks Josh :)
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?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,772
Messages
2,569,593
Members
45,108
Latest member
AlbertEste
Top