2013-01-22 7 views
3

두 명의 플레이어가 손에 각각 4 장의 카드를 가지고 있으며 합계로 가능한 한 많은 카드를 테이블에 가져와야하는 작은 카드 게임을 작성 중입니다. 고전적인 포커 카드를 사용하고 있기 때문에 동일한 씨앗과 동일한 가치가 있습니다.독특한 조합을위한 카드 게임 알고리즘

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

번호가 카드 예를 들어, 그래서 합으로 수행 할 수 있습니다

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

씨앗 관련이없는 ... 유일한 값입니다. 그러나 문제는 고유 조합을 계산해야한다는 것입니다. 예를 들어 씨앗과 값이 같은 경우에만 해당 콤보 중 하나를 원합니다.

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

미리 만들기 기능이 있습니까? 나는 구글과 위키 피 디아 (Wikipedia)로 둘러 보았지만 어쩌면 알고리즘/문제의 이름을 영어로 알지 못했을 것이다. Aw ... 나는 잊고 있었다 ... 당신이 원하는 무엇이든 될 수있는 솔루션 (일반, 재귀, linq).

답변

2

계산하려는 조합을 integer partitions이라고합니다. 그에 상응하여 integer partition algorithm 후에 있습니다. 이 크 누스의 algorithm P in fascicle 3B 개념적으로 유사하다

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) 

: 같은 파이썬에서

해결책이 보일 수 있습니다.

+0

예처럼 보이지만 maxCount 제한이 없습니다. –