홀덤기준 파이썬
01(A),02,03,04,05,06,07,08,09,10(T),11(J),12(Q),13(K)로 숫자를 구분, 이를 14진법으로서 인식한다.
1,2,3,4,5,6,7,8,9,A,B,C,D
스페이드 다이아몬드 하트 클로버를 순서대로 0,1,2,3으로 구분한다.
스페이드 킹, 다이아 8, 스페이드 잭, 클로버 10, 하트 에이스를 표현할 경우,
D0,81,B0,A3,12 을 합친 D081의 14진법 10자리 숫자로서 표현
이때, 족보를 계산하기 쉽도록 미리 5장의 카드를 내림차순으로 정렬한다 *1)
그경우 D0,B0,A0,81,12가 되겠다. (키커, rank등을 판단하기 쉽게 하기 위함)
#Q. 14진법을 쓰는게 좋은 생각인가?
#A. 어차피 빼기 수준, 어쩌면 더 낮은 수준의 연산을 할 것이기 때문에 별로 관련없을듯
5장에 대한 족보의 판단
먼저 플러쉬 여부를 확인
Y. 스트레이트 여부를 확인 (T, J, Q, K, A 로 이루어진 마운틴은 이후 확인)
Y-Y. 스트레이트 플러쉬, 현재 내림차순으로 14진법의 5자리로 rank를 결정
Y-N. 마운틴 여부를 확인
Y-N-Y. 로열 스트레이트 플러쉬.
Y-N-N. 플러쉬, 현재 내림차순으로 14진법의 5자리로 rank를 결정
이때, 플러쉬는 페어를 가질 수 없기에 이걸로 끝이다.
N. 스트레이트 여부를 확인 (T, J, Q, K, A 로 이루어진 마운틴은 이후 확인)
N-Y. 스트레이트, 현재 내림차순으로 14진법의 5자리로 rank를 결정
N-N. 마운틴 여부를 확인
N-N-Y. 마운틴(브로드웨이 스트레이트.)
N-N-N. 같은 숫자 조합이 있는지 확인.
해당 로직 :
페어 수 리스트 = []
해당 페어의 중복수(pair? triple? quads?) = 1
카드 인덱스(i) = 1
for i == 4 : #5인가?
if i 의 숫자 == i+1 의 숫자 : 해당 페어의 중복수 += 1,
else :
if 해당 페어의 중복수 == 1 : pass
사용하는 카드는 7장(핸드 / 커뮤니티 구분 x)
가능한 콤보는 5C7 = 7*6 / 2*1 = 21개
21개 콤보 리스트는 미리 작성할까함 [ (1,1,1,1,1,0,0) , (1,1,1,1,0,1,0), (1,1,1,1,0,0,1), (1,1,1,0,1,1,0), ... (0,0,1,1,1,1,1) ]
# 좋은 생각인가?
7장의 카드를 튜플(D2, D1. D0. C2, 82, 62, 22)로 만든다.
이때, 내림차순을 7장에서 미리 해두면 5장을 뽑을 때 무조건 내림차순이 되는바, 여기서 미리 해두고 이를 신뢰하자.
초기 핸드파워는 (0, 76542)로 가장 낮은 수준으로 만들어 둔다.
씨발. 에이스를 1이 아니라 E로 했어야 됐네.... 시발시발 1로하니까 가장 낮은 파워가 (0, 65431)이 되잖아
그래도 정리는 충분히 했으니 이제 코딩해야겠다.
고마워용~
댓글 0