Распечатайте все комбинации X различных объектов, выбранных из Y элементов списка - PullRequest
1 голос
/ 08 ноября 2010

Например, 5 карт в покерной руке из 52 карт = 2598960 комбинаций.
Как бы я на самом деле отобразил все эти комбинации?

Код для определения номера прост:

def binomial_coef(total,subset)
  factorial(total) / (factorial(subset) * factorial(total - subset))
end

def factorial(n)
  n.downto(1).inject(:*)
end

# different 5 card poker hand combinations
cards = 52
hand_number = 5

puts binomial_coef(cards, hand_number)

Есть какие-нибудь идеи относительно решения распечатки всех фактических комбинаций?
Например:

1,2,3,4,5
1,2,3,4,6
и т. Д.

Или даже помочь начать работу.Спасибо!

Ответы [ 3 ]

6 голосов
/ 08 ноября 2010

Вам нужно Array#combination

cards = (1..52).to_a
hand_number = 5
cards.combination(hand_number).to_a

=> [[1,2,3,4,5],[1,2,3,4,6],...]
1 голос
/ 08 ноября 2010
puts (1..52).to_a.combination(5).to_a.inspect
1 голос
/ 08 ноября 2010
(1..52).to_a.combination(5)
...