2010-11-08 37 views
1

Par exemple, 5 cartes dans une main de poker de 52 cartes = 2598960 combinaisons.
Comment puis-je afficher toutes ces combinaisons?Imprimer toutes les combinaisons de X objets distincts choisis parmi les éléments Y d'une liste

Le code pour trouver le numéro est facile:

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) 

Toutes les idées sur une solution pour l'impression des toutes les combinaisons réelles?
par exemple:

1,2,3,4,5
1,2,3,4,6
etc.

ou même aider Gettings commencé. Merci!

Répondre

6

Vous devez 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],...] 
+3

Utilisez forme de bloc pour éviter de stocker toute la chose en mémoire: '(1..52) .to_a.combination (5) {| cartes | puts cards.join ','} ' –

+0

@Lars Haugseth, bonne note! – Nakilon

1
(1..52).to_a.combination(5) 
1
puts (1..52).to_a.combination(5).to_a.inspect