삼평 하이로우 v2.0 Part 5: 규칙 전문 — 기준 판정, 변경 이력, 미결 사항, 재현 스크립트
이 글은 Claude Fable 5.1 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.
네 편에 걸쳐 v1.4 규칙을 재 보았습니다. Part 2 는 확률표와 순위, Part 3 은 홀카드 자유 사용과 쏠림, Part 4 는 로우와 인원입니다. 이번 편은 그 결과를 모아 v2.0 규칙 전문을 씁니다. 규칙만 필요한 분은 2절부터 읽으시면 됩니다.
1. 기준 판정#
Part 1 에서 결과를 보기 전에 정한 여섯 기준입니다. 모두 v1.4 규칙 그대로 잰 값입니다.
| # | 기준 | 합격선 | 실측 | 판정 |
|---|---|---|---|---|
| C1 | 하이 팟 동률(찹) 비율 | 같은 인원의 홀덤 이하 | 6인 7.05% (홀덤 7.23%) | 통과 |
| C2 | 6인 쇼다운 승리 족보 집중도 | 한 족보 35% 이하 | 최대 풀하우스 25.3% | 통과 |
| C3 | 6인 로우 성립률 / 동률률 | 35~55% / 15% 이하 | 46.9% / 11.6% | 통과 |
| C4 | 헤즈업 에쿼티 폭 | 상위 1% 80% 이하, 하위 1% 30% 이상 | 70.9% / 35.8% | 통과 (포켓 트립스 0.235% 는 예외) |
| C5 | 6인 하이로우 A-2-x 에쿼티 | 평균의 2배 이하 | 1.43배 | 통과 |
| C6 | 순위·희소성 역전 | 의도된 것만, 문서화 | 스킵↔플러시 1건 | 문서화하여 통과 |
여섯 기준을 모두 통과했습니다. 이것은 v1.4 의 규칙이 밸런스 면에서 손댈 곳이 거의 없었다는 뜻입니다. 1년 전에 감으로 정한 것들(홀카드 3장, 자유 사용, 7-or-better, 스트레이트 > 트리플)이 숫자로 지지되었습니다.
그렇다면 v2.0 에서 바뀌는 것은 무엇인가. 규칙의 수치가 아니라 규칙의 근거와 빈칸 입니다.
flowchart LR
subgraph R["기각한 변형"]
R1["최소 1장 사용<br/>효과 없음"]
R2["트리플 > 스트레이트<br/>턴 액션 사망"]
R3["스킵 > 플러시<br/>찹 증가"]
R4["8-or-better<br/>로우 70%"]
end
subgraph A["추가"]
A1["로우 세칙 4항"]
A2["스킵 동률·A 세칙"]
A3["홀수 칩 규칙"]
A4["선택 규칙 PLS-2"]
A5["전략 참고표"]
end
subgraph C["교체"]
C1["확률표 4종<br/>추정 → 실측"]
C2["순위 설명<br/>전제 정정"]
C3["하이 온리 권장선<br/>4명 이하 → 3명 이하"]
end
subgraph K["유지"]
K1["홀카드 3장<br/>0~3장 자유 사용"]
K2["스킵 스트레이트<br/>스킵 SF"]
K3["족보 순위 12단계"]
K4["7-or-better"]
K5["팟 리밋"]
end
style K1 fill:#90EE90,color:#000000
style K2 fill:#90EE90,color:#000000
style K3 fill:#90EE90,color:#000000
style K4 fill:#90EE90,color:#000000
style K5 fill:#90EE90,color:#000000
style C1 fill:#FFD700,color:#000000
style C2 fill:#FFD700,color:#000000
style C3 fill:#FFD700,color:#000000
style A1 fill:#87CEEB,color:#000000
style A2 fill:#87CEEB,color:#000000
style A3 fill:#87CEEB,color:#000000
style A4 fill:#87CEEB,color:#000000
style A5 fill:#87CEEB,color:#000000
style R1 fill:#555555,color:#bbbbbb
style R2 fill:#555555,color:#bbbbbb
style R3 fill:#555555,color:#bbbbbb
style R4 fill:#555555,color:#bbbbbb
2. 삼평 하이로우 v2.0 규칙 전문#
삼평 하이로우(PLS7, Pot Limit Sampyong 7-or-better)는 팟 리밋 오마하 하이로우(PLO8)를 기반으로, 홀카드를 3장으로 줄이고 그 사용을 자유롭게 하며 스킵 스트레이트 족보를 더한 포커 변종입니다.
2-1. 핵심 규칙#
| 항목 | 규칙 |
|---|---|
| 베팅 | 팟 리밋. 베팅과 레이즈는 그 시점의 팟 크기까지 |
| 홀카드 | 각자 3장. 보드에 공통 카드 5장. 합쳐서 8장 풀 |
| 하이 핸드 | 8장 가운데 아무 5장 으로 만든다. 홀카드를 0장, 1장, 2장, 3장 어느 것이든 써도 된다 |
| 로우 핸드 | 8장 가운데 아무 5장으로 만들되, 서로 다른 7 이하 5장 이어야 성립한다(7-or-better). A 는 1 이다. 최고 로우는 A-2-3-4-5 |
| 팟 분배 | 최고 하이 핸드가 팟의 절반, 최고 로우 핸드가 나머지 절반. 로우가 성립한 사람이 없으면 하이가 전부 가져간다 |
| 인원 | 2~10명. 4명 이상에서 하이로우, 3명 이하에서는 하이 온리를 권장한다 (2-6절) |
2-2. 특수 족보#
스킵 스트레이트 — 서로 다른 5장이 한 칸씩 건너뛰며 이어진 조합입니다. A 는 가장 낮은 스킵(A-3-5-7-9)에서 1, 가장 높은 스킵(6-8-T-Q-A)에서 14 로 씁니다. 가능한 조합은 여섯 가지이고, 아래로 갈수록 강합니다.
| 스킵 스트레이트 | 비고 |
|---|---|
| A-3-5-7-9 | 가장 낮다. 스트레이트의 A-2-3-4-5 에 해당 |
| 2-4-6-8-T | |
| 3-5-7-9-J | |
| 4-6-8-T-Q | |
| 5-7-9-J-K | |
| 6-8-T-Q-A | 가장 높다 |
같은 스킵 스트레이트끼리는 가장 높은 카드로 비교하고, 가장 높은 카드가 같으면 동률입니다(무늬는 무관). 8장 안에 스트레이트와 스킵 스트레이트가 함께 있으면 순위가 높은 스킵 스트레이트로 판정합니다. 8장 핸드의 1.2% 에서 실제로 일어납니다.
스킵 스트레이트 플러시 — 스킵 스트레이트이면서 5장의 무늬가 같은 조합입니다. 예: 2♥ 4♥ 6♥ 8♥ T♥. 로열 플러시(A-K-Q-J-T 같은 무늬)는 스트레이트 플러시의 최상위이며 스킵 스트레이트 플러시보다 위입니다.
2-3. 족보 순위와 실측 확률#
확률은 8장 풀(홀 3 + 보드 5) 기준으로 딜 200만 회를 시뮬레이션해 잰 값입니다. “배타” 는 8장에서 만들 수 있는 최고의 손이 그 족보일 확률, “조건 포함” 은 그 족보 이상을 하나라도 만들 수 있을 확률, “6인 승리” 는 6명이 모두 쇼다운했을 때 그 족보가 이길 확률입니다.
| 순위 | 족보 | 배타 | 조건 포함 | 6인 승리 | 약칭 |
|---|---|---|---|---|---|
| 1 | 로열 플러시 | 0.0084% | 0.0084% | 0.05% | 로티플 |
| 2 | 스킵 스트레이트 플러시 | 0.049% | 0.049% | 0.29% | 빵티플 |
| 3 | 스트레이트 플러시 | 0.071% | 0.072% | 0.40% | 스티플 |
| 4 | 포카드 | 0.34% | 0.34% | 1.9% | 포카 |
| 5 | 풀하우스 | 6.07% | 6.19% | 25.3% | 집 |
| 6 | 플러시 | 6.71% | 6.89% | 21.0% | 뿔 |
| 7 | 스킵 스트레이트 | 5.81% | 6.39% | 15.9% | 스킵, 빵꾸줄 |
| 8 | 스트레이트 | 7.85% | 9.80% | 14.1% | 줄 |
| 9 | 트리플 | 4.99% | 12.02% | 7.0% | 봉, 셋 |
| 10 | 투 페어 | 33.47% | 43.76% | 13.2% | 투피 |
| 11 | 원 페어 | 28.80% | 88.78% | 0.9% | 원피 |
| 12 | 하이 카드 | 5.83% | 100% | 0.0% | 탑 |
순위의 근거. 순위는 조건 포함 확률의 희소성 순서를 따릅니다. 한 곳만 예외입니다.
- 스트레이트 > 트리플 은 희소성 그대로입니다. 8장 풀에서 트리플(12.0%)은 스트레이트(9.8%)보다 흔합니다. 덧붙여 턴에서 트리플을 든 사람과 스트레이트 드로우를 든 사람 사이의 액션을 살리는 순서이기도 합니다. 반대로 두면 드로우의 리버 에쿼티가 0 이 되어 턴 베팅에 콜할 가격이 나오지 않습니다.
- 플러시 > 스킵 스트레이트 는 의도된 예외입니다. 8장 풀에서 스킵 스트레이트(6.39%)는 플러시(6.89%)보다 근소하게 희귀하지만, 5장 기준으로는 플러시(5,084 조합)가 스킵(6,120 조합)보다 희귀합니다. 플러시는 모든 플레이어가 위치를 아는 족보이고, 스킵을 위로 올리면 찹이 7.05% 에서 8.20% 로 늘어납니다. 새 족보가 학습 비용을 지는 쪽을 택했습니다.
2-4. 게임 진행#
- 블라인드. 스몰 블라인드와 빅 블라인드가 정해진 금액을 냅니다.
- 프리플랍. 각자 3장을 받고 첫 베팅을 합니다.
- 플랍, 턴, 리버. 보드에 3장, 1장, 1장이 차례로 깔리고 각 라운드마다 베팅합니다.
- 쇼다운. 남은 플레이어가 패를 공개합니다. 하이 핸드와 로우 핸드를 각각 선언합니다. 두 핸드는 서로 다른 홀카드 조합을 써도 됩니다.
- 팟 분배. 하이 팟과 로우 팟을 나눕니다. 같은 하이 핸드가 여럿이면 하이 팟을 그 수로, 같은 로우 핸드가 여럿이면 로우 팟을 그 수로 나눕니다(쿼터링). 나누어 떨어지지 않는 칩은 하이 팟 승자가 받고, 하이 팟 안에서 동률이면 딜러 버튼의 왼쪽에 가까운 사람이 받습니다.
2-5. 로우 세칙#
| 항목 | 규칙 |
|---|---|
| 자격 | 서로 다른 랭크 5장, 모두 7 이하. A 는 1 |
| 비교 | 높은 카드부터 낮은 순으로 비교한다. 7-6-5-4-3 보다 7-5-4-3-2 가 좋고, 그보다 6-5-4-3-2 가 좋다 |
| 스트레이트·플러시 | 로우 판정에 해가 되지 않는다. A-2-3-4-5 는 하이에서 스트레이트, 로우에서 최고 로우로 동시에 쓸 수 있다 |
| 홀카드 | 하이와 다른 홀카드 조합을 써도 되고, 0~3장 어느 것이든 된다 |
2-6. 인원 권장선#
7-or-better 에서 로우가 성립하는 빈도와 팟이 실제로 나뉘는 빈도(전원 쇼다운 기준)입니다.
| 쇼다운 인원 | 2 | 3 | 4 | 5 | 6 | 8 |
|---|---|---|---|---|---|---|
| 로우 성립 | 25.9% | 33.2% | 38.8% | 43.3% | 46.9% | 52.6% |
| 팟이 나뉘는 판 | 15.3% | 23.9% | 30.5% | 35.8% | 40.2% | 47.1% |
4명 이상은 하이로우, 3명 이하는 하이 온리(PLS) 를 권장합니다. 4인부터 열 판 중 세 판이 나뉘어 로우가 두 번째 게임으로 기능합니다. 헤즈업에서는 일곱 판 중 한 판만 나뉘고 그 분할은 서로 돈을 돌려주는 것과 같습니다. 권장이지 규칙은 아닙니다.
2-7. 선택 규칙 — PLS-2#
찹이 잦다고 느끼는 테이블은 “하이와 로우 모두 홀카드를 최소 2장 써야 한다” 를 켤 수 있습니다. 같은 200만 딜로 잰 효과입니다.
| 6인 쇼다운 | 기본 (자유 사용) | PLS-2 (최소 2장) |
|---|---|---|
| 하이 팟 동률 | 7.05% | 3.36% |
| 로우 동률 (성립한 판 중) | 11.6% | 7.5% |
| 풀하우스로 승리 | 25.3% | 22.6% |
| 트리플로 승리 | 7.0% | 9.3% |
| 투 페어로 승리 | 13.2% | 14.5% |
찹이 절반으로 줄고 족보 분포가 고르게 되지만, 쇼다운마다 “2장 썼는가” 를 확인해야 하고, 보드의 4장 스트레이트에 한 장을 보탠 손이 스트레이트가 아니게 됩니다. 기본 규칙은 자유 사용입니다.
2-8. 전략 참고표#
규칙은 아니지만 알아 두면 자동 폴드와 무모한 콜이 모두 줄어드는 숫자입니다.
쇼다운에서 이기는 족보 (인원별, 전원 쇼다운 가정)
| 인원 | 풀하우스 이상 | 플러시 | 스킵 | 스트레이트 | 트리플 | 투 페어 이하 |
|---|---|---|---|---|---|---|
| 2 | 11.9% | 11.4% | 9.6% | 11.8% | 6.6% | 48.8% |
| 4 | 20.7% | 17.4% | 14.0% | 14.5% | 7.6% | 25.7% |
| 6 | 27.9% | 21.0% | 15.9% | 14.1% | 7.0% | 14.1% |
| 8 | 34.0% | 23.3% | 16.4% | 12.7% | 5.9% | 7.7% |
보드 텍스처와 승자 족보 (6인 전원 쇼다운)
| 보드 | 승자가 풀하우스 이상 | 승자가 플러시 이상 | 승자가 스트레이트 이상 |
|---|---|---|---|
| 페어 보드 | 48.9% | 62.5% | 78.9% |
| 같은 무늬 3장 이상 | 25.4% | 70.6% | 88.1% |
| 드라이 보드 | 6.9% | 15.7% | 72.8% |
스타팅 핸드 (랜덤 상대, 하이 온리)
| 손 | 헤즈업 | 6인 | 비고 |
|---|---|---|---|
| 포켓 트립스 | 79~89% | 41~67% | 425판에 한 번 |
| A-A-x 수딧 | 70~73% | 28~30% | |
| K-J-T 수딧 | 64% | 35% | 6인 최강 비트립스 손 |
| 9-7-5 수딧 | 63% | 35% | 스킵 커넥터. 6인에서 K-J-T 와 동급 |
| J-T-9 수딧 | 67% | 34% | |
| K-K-x | 67% | 22% | |
| 낮은 포켓 페어 (7-7-2, K-4-4) | 49~50% | 16% | 중앙값. 페어는 자동으로 강하지 않다 |
| 7-3-2 레인보우 | 33% | 8% | 하이 온리 최약. 하이로우에서는 22% 로 평균 이상 |
턴 드로우의 리버 에쿼티 (트리플 상대)
| 드로우 | 아웃 | 에쿼티 |
|---|---|---|
| 양방 스트레이트 | 8 | 19% |
| 한방 스킵 | 4 | 10% |
| 양방 스킵 + 거트샷 스트레이트 | 12 | 29% |
3. 변경 이력#
v1.4 → v2.0 (2026-09-17)#
| 항목 | v1.4 | v2.0 | 근거 |
|---|---|---|---|
| 확률표 4종 | 대화형 AI 추정치 | 딜 200만 회 실측치 | Part 2. 풀하우스·플러시가 실제의 60%, 스트레이트 계열이 절반으로 적혀 있었다 |
| 순위 설명 (스트레이트 > 트리플) | “트리플이 더 희귀하지만 액션을 위해” | “트리플이 더 흔하다. 액션은 보조 근거” | Part 2. 조건 포함 12.0% 대 9.8% |
| 순위 설명 (플러시 > 스킵) | 없음 | 의도된 역전으로 명시 | Part 2. 8장 기준 유일한 역전 |
| 하이 온리 권장선 | 4명 이하 | 3명 이하 | Part 4. 4인은 팟의 30% 가 나뉜다 |
| 권장 이유 | “소인원에서 스플릿이 잦다” | “소인원에서 로우가 드물다” | Part 4. 방향이 반대였다 |
| 스킵 동률·A 세칙 | 없음 | 명시 | 심판 프로그램을 짜다 발견 |
| 스트레이트·스킵 동시 성립 | 없음 | 높은 쪽으로 판정 | 8장 핸드의 1.2% |
| 로우 세칙 4항 | 없음 | 명시 | Part 4 |
| 홀수 칩·쿼터링 | 없음 | 명시 | Part 4 |
| 선택 규칙 PLS-2 | 없음 | 추가 | Part 3·4 |
| 전략 참고표 | 없음 | 추가 | Part 3. 텍스처 표가 자동 폴드를 줄인다 |
| 홀카드 3장, 0~3장 자유 사용 | 유지 | Part 3. 보드 플레이 0.14%, 찹은 홀덤 이하 | |
| 스킵 스트레이트, 스킵 SF | 유지 | Part 3. 스타팅 핸드 지도를 실제로 바꾼다 | |
| 족보 순위 12단계 | 유지 | Part 2 | |
| 7-or-better | 유지 | Part 4. C3 을 통과하는 유일한 자격선 | |
| 팟 리밋 | 유지 | Part 3. 프리플랍 에쿼티 폭이 좁다 |
v1.x 이력 (원본에서 옮김)#
- 2025-07-28: 쿼드 페어, 더블 트리플 족보 제거
- 2025-07-29: 트라이 페어를 쓰리 페어로 개명, 트리플 > 쓰리 페어로 순위 변경
- 2025-07-29 (2): 쓰리 페어 족보 제거
- 2025-07-30: 스킵 스트레이트 플러시 족보 추가 (v1.4)
4. 미결 사항 — 시뮬레이션이 답하지 못한 것#
정직하게 적어 둡니다. 다섯 편의 숫자는 전부 전원이 쇼다운까지 간다 는 가정에서 나왔습니다. 실제 테이블에서는 사람이 접습니다.
| 미결 | 왜 남았나 | 어떻게 확인할 수 있나 |
|---|---|---|
| 폴드가 있는 실제 분포 | 약한 손이 접으면 쇼다운 인원이 줄고 찹·스쿱·승리 족보 분포가 모두 바뀐다. “6인 쇼다운” 은 실제로는 6인 테이블의 2~3인 쇼다운에 가깝다 | 실제 판의 쇼다운 인원과 승리 족보를 20판 단위로 기록해 인원별 표와 대조한다 |
| 베팅 전략 | 에쿼티는 올인 기준이다. 팟 리밋에서 드로우가 실제로 받는 가격, 블러프의 성공률은 재지 않았다 | 실전 관찰 외에는 방법이 없다 |
| 질림의 실체 | 보드 텍스처 표가 자동 폴드를 줄일 것이라는 주장은 가설이다. 사람이 표를 알면 오히려 더 빨리 접을 수도 있다 | 표를 공유하기 전후로 쇼다운 인원 평균을 비교한다 |
| PLS-2 의 실전 감각 | 찹이 반으로 준다는 것은 알지만, “2장 확인” 의 번거로움이 그 이득을 상쇄하는지는 쳐 봐야 안다 | 같은 인원으로 한 세션씩 번갈아 친다 |
| 3인 하이로우 | 권장선을 3명 이하 하이 온리로 옮긴 것은 23.9% 와 30.5% 사이에 선을 그은 판단이다. 3인 테이블이 하이로우를 즐긴다면 그것이 맞다 | 3인 테이블의 선호를 묻는다 |
| 표본 오차 | 스타팅 핸드 에쿼티는 헤즈업 ±0.9%p, 6인 ±1.1%p 다. T-T-T 가 A-A-A 보다 위(88.9% 대 87.4%)라는 것은 오차 폭 안에서 의심할 수 있다 | 특정 손을 비교할 때는 샘플을 10배로 늘려 다시 잰다 |
이 가운데 첫 번째가 가장 큽니다. 수백 판의 실제 기록이 쌓이면 이 시리즈의 표를 그 기록과 대조하는 것이 v2.1 의 출발점입니다.
5. 맺음#
1년 전의 규칙은 대부분 옳았고, 그 규칙에 붙어 있던 숫자와 설명은 대부분 틀렸습니다. 규칙은 게임을 치면서 몸으로 조정한 것이고, 숫자는 대화형 AI 에게 물어서 받은 것이었습니다. 몸이 맞고 숫자가 틀렸다는 것은 이번 재검토에서 가장 흥미로운 결과입니다.
v2.0 이 한 일은 그 몸의 판단에 근거를 붙이고, 규칙서를 코드로 옮길 때 드러난 빈칸을 채운 것입니다. 이 과정에서 가장 유용했던 도구는 시뮬레이터가 아니라 “규칙대로 심판 프로그램을 짜 본다” 는 행위 자체였습니다. 로우에서 스트레이트가 해가 되는지, 같은 스킵 스트레이트는 어떻게 비교하는지 같은 질문은 규칙을 코드로 옮기기 전에는 아무도 묻지 않았습니다.
부록: 핵심 수치 재현 스크립트#
표준 라이브러리만 씁니다. 8장 핸드의 족보 분포(배타·조건 포함), 지정한 인원의 쇼다운 승리 족보, 하이 찹, 로우 성립·동률·스쿱을 출력합니다. 딜 10만 회에 한 코어로 13초가 걸리며, 본문의 200만 회 표와 표본 오차 안에서 일치합니다.
python3 pls7_mini.py 100000 6
#!/usr/bin/env python3
"""삼평 하이로우(PLS7) v2.0 핵심 수치 재현 스크립트. 표준 라이브러리만 쓴다.
사용: python3 pls7_mini.py [딜 수] [쇼다운 인원] (기본 200000 딜, 6인)
출력: 8장 핸드 족보 분포(배타·조건 포함), n인 쇼다운 승리 족보, 하이 찹, 로우 성립·동률·스쿱.
"""
import itertools, random, sys
from collections import Counter
CATS = ['하이카드', '원페어', '투페어', '트리플', '스트레이트', '스킵', '플러시',
'풀하우스', '포카드', '스트레이트플러시', '스킵스트레이트플러시', '로열']
SUBSETS = list(itertools.combinations(range(8), 5))
CACHE = {}
LOW_Q = 7 # 7-or-better
def eval5(ranks, flush):
"""ranks: 내림차순 5-tuple (2..14, A=14). (족보 번호, 타이브레이크, 로우) 를 돌려준다."""
key = (ranks, flush)
if key in CACHE:
return CACHE[key]
cnt = Counter(ranks)
distinct = sorted(cnt, reverse=True)
low = None
if len(distinct) == 5:
low = tuple(sorted((1 if r == 14 else r for r in distinct), reverse=True))
r0, r1, r2, r3, r4 = distinct
st = r0 if r0 - r4 == 4 else 5 if distinct == [14, 5, 4, 3, 2] else None
sk = (r0 if (r0 - r4 == 8 and r1 == r0 - 2 and r2 == r0 - 4 and r3 == r0 - 6)
else 9 if distinct == [14, 9, 7, 5, 3] else None)
if flush:
v = ((11, (14,)) if st == 14 else (9, (st,)) if st else (10, (sk,)) if sk else (6, ranks))
else:
v = (4, (st,)) if st else (5, (sk,)) if sk else (0, ranks)
else:
by = sorted(cnt.items(), key=lambda kv: (kv[1], kv[0]), reverse=True)
(a, ca), (b, cb) = by[0], by[1]
v = ((8, (a, b)) if ca == 4 else (7, (a, b)) if ca == 3 and cb == 2
else (3, (a, b, by[2][0])) if ca == 3 else (2, (a, b, by[2][0])) if cb == 2
else (1, (a, b, by[2][0], by[3][0])))
CACHE[key] = (v, low)
return CACHE[key]
def best_of_8(cards):
"""8장(홀 3 + 보드 5)에서 최고 하이 (족보, 타이브레이크), 최고 로우, 존재하는 족보 집합."""
rv = [c % 13 + 2 for c in cards]
sv = [c // 13 for c in cards]
best, best_low, present = None, None, set()
for i0, i1, i2, i3, i4 in SUBSETS:
flush = sv[i0] == sv[i1] == sv[i2] == sv[i3] == sv[i4]
ranks = tuple(sorted((rv[i0], rv[i1], rv[i2], rv[i3], rv[i4]), reverse=True))
v, low = eval5(ranks, flush)
present.add(v[0])
if best is None or v > best:
best = v
if low is not None and low[0] <= LOW_Q and (best_low is None or low < best_low):
best_low = low
return best, best_low, present
def main():
n_deals = int(sys.argv[1]) if len(sys.argv) > 1 else 200000
n_players = int(sys.argv[2]) if len(sys.argv) > 2 else 6
rng = random.Random(42)
deck = list(range(52))
dist, present_cnt, wincat = Counter(), Counter(), Counter()
hi_split = low_exists = low_split = scoop = 0
for _ in range(n_deals):
rng.shuffle(deck)
board = deck[n_players * 3:n_players * 3 + 5]
hands = [best_of_8(deck[p * 3:p * 3 + 3] + board) for p in range(n_players)]
for best, _, present in hands:
dist[best[0]] += 1
for c in present:
present_cnt[c] += 1
top = max(h[0] for h in hands)
hi_w = [i for i, h in enumerate(hands) if h[0] == top]
wincat[hands[hi_w[0]][0][0]] += 1
hi_split += len(hi_w) > 1
lows = [(i, h[1]) for i, h in enumerate(hands) if h[1] is not None]
if lows:
low_exists += 1
mn = min(l for _, l in lows)
lo_w = [i for i, l in lows if l == mn]
low_split += len(lo_w) > 1
scoop += len(hi_w) == 1 and lo_w == hi_w
else:
scoop += len(hi_w) == 1
hands_total = n_deals * n_players
print(f'딜 {n_deals} 회, {n_players} 인 쇼다운, 핸드 {hands_total} 개')
print(f'{"족보":12s} {"배타":>8s} {"조건포함":>8s} {"쇼다운승리":>9s}')
for c in range(11, -1, -1):
print(f'{CATS[c]:12s} {dist[c] / hands_total * 100:7.3f}% {present_cnt[c] / hands_total * 100:7.3f}% '
f'{wincat[c] / n_deals * 100:8.2f}%')
print(f'하이 찹 {hi_split / n_deals * 100:.2f}% 로우 성립 {low_exists / n_deals * 100:.1f}% '
f'로우 동률(성립 중) {low_split / max(low_exists, 1) * 100:.1f}% 스쿱 {scoop / n_deals * 100:.1f}%')
if __name__ == '__main__':
main()
본문의 규칙 변형 비교(홀카드 규칙 4종, 순위 4종, 로우 자격 3종, 인원 2~8 동시 집계), 홀덤·PLO 베이스라인, 스타팅 핸드 1,755 종 에쿼티 그리드, 보드 텍스처 표는 이 스크립트를 확장한 별도 버전으로 쟀습니다. 확장 버전은 같은 평가기 위에 규칙별 최고 손을 카테고리마다 따로 유지하는 구조이며, 홀덤 7장 정확값(Part 1 의 표)으로 검증했습니다.
References#
- 원본 가이드: 삼평 하이로우 (PLS7) 게임 가이드 v1.4
- Wikipedia, Poker probability — 5장·7장 정확 빈도
- Wikipedia, Omaha hold ’em — 하이로우 표준 규칙