3 votes

Algorithme de jeu de cartes pour les combinaisons uniques

Je suis en train d'écrire un petit jeu de cartes dans lequel deux joueurs ont chacun 4 cartes en main et doivent prendre autant de cartes sur la table qu'ils le peuvent par addition. Il utilise les cartes de poker classiques, donc les mêmes graines et les mêmes valeurs.

King can only take another King
Queen can only take another Queen 
Jack can only take another Jack

Les cartes numérotées peuvent prendre la forme d'une somme, par exemple :

10H takes 6C + 4S
5S takes 3C + 2D or 3S + 2D
7S takes 4S + 3S or 5C + 2D
And so on...

Les semences ne sont pas pertinentes... seules les valeurs le sont. Mais le problème est que je dois calculer des combinaisons uniques. Ainsi, par exemple, je ne veux qu'une seule de ces combinaisons car les graines et les valeurs sont identiques :

10H -> 6C + 4S
10H -> 4S + 6C

Existe-t-il une fonction préétablie pour faire cela ? J'ai essayé de chercher sur Google et Wikipedia mais je ne connais probablement pas le nom de l'algorithme/problème en anglais. Ah... J'oubliais... la solution peut être ce que vous voulez (simple, récursive, linq).

2voto

cmh Points 4290

Les combinaisons que vous essayez de calculer sont appelées partitions de nombres entiers . En conséquence, vous recherchez un algorithme de partition en nombres entiers .

Une solution en python pourrait ressembler à ceci :

def bubble(part, i=0): #add one to the list whilst keeping lexicographic order
    if i == (len(part)-1) or part[i] < part[i+1]:
        part[i] += 1
        return part
    else:
        return bubble(part, i+1)

def partitions(n):
    if n == 1:
        yield [1]
        return
    for p in partitions(n-1):
        yield [1] + p
        yield bubble(p)

Ce concept est similaire à celui de Knuth. algorithme P dans le fascicule 3B .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X