From: Alexander Antonakakis on
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
From: Alexander Antonakakis on
Thomas Preymesser wrote:
> On 25 February 2010 09:40, Alexander Antonakakis <alexis(a)maich.gr>
> 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/.

From: Giampiero Zanchi on

> 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/.

From: Alexander Antonakakis on
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/.

From: Josh Cheek on
[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