From: Alexander Antonakakis on 25 Feb 2010 03:40 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 25 Feb 2010 05:36 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 25 Feb 2010 07:01 > 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 25 Feb 2010 07:09 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 25 Feb 2010 07:23
[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 |