mirror of
https://github.com/friuns2/BlackFriday-GPTs-Prompts.git
synced 2026-05-02 23:13:54 +07:00
2024 chatgpt update
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
|
||||
[](https://gptcall.net/chat.html?data=%7B%22contact%22%3A%7B%22id%22%3A%224Ia4PvhTpqH-8FvT_Mst2%22%2C%22flow%22%3Atrue%7D%7D)
|
||||
|
||||
# Texas Holdem Equity Calculator (Wrong) | [Start Chat](https://gptcall.net/chat.html?data=%7B%22contact%22%3A%7B%22id%22%3A%224Ia4PvhTpqH-8FvT_Mst2%22%2C%22flow%22%3Atrue%7D%7D)
|
||||
Texas Holdem Equity Calculator
|
||||
|
||||
@@ -12,6 +12,173 @@ All players’ hole card must be considered when calculating equity. Please note
|
||||
Improve the program to calculate the precise equity. And deal with situation where there are multiple players, external given part of the board cards and extra discarded card in the deck.
|
||||
```
|
||||
|
||||
## Welcome Message
|
||||
Here is a Python code to calculate Texas No Limit Holdem equity:
|
||||
|
||||
|
||||
|
||||
```python
|
||||
|
||||
import random
|
||||
|
||||
from itertools import combinations
|
||||
|
||||
|
||||
|
||||
class Deck:
|
||||
|
||||
def __init__(self):
|
||||
|
||||
self.cards = list(range(52))
|
||||
|
||||
random.shuffle(self.cards)
|
||||
|
||||
self.index = 0
|
||||
|
||||
|
||||
|
||||
def get_card(self):
|
||||
|
||||
card = self.cards[self.index]
|
||||
|
||||
self.index += 1
|
||||
|
||||
return card
|
||||
|
||||
|
||||
|
||||
def get_card_name(card):
|
||||
|
||||
suit = 'cdhs'[card // 13]
|
||||
|
||||
rank = '23456789TJQKA'[card % 13]
|
||||
|
||||
return rank + suit
|
||||
|
||||
|
||||
|
||||
def get_hand_type(hand):
|
||||
|
||||
ranks = sorted([card % 13 for card in hand])
|
||||
|
||||
suits = [card // 13 for card in hand]
|
||||
|
||||
flush = len(set(suits)) == 1
|
||||
|
||||
straight = (max(ranks) - min(ranks) == 4 and len(set(ranks)) == 5) or \
|
||||
|
||||
(ranks == [0, 9, 10, 11, 12])
|
||||
|
||||
if straight and flush:
|
||||
|
||||
return 8, max(ranks)
|
||||
|
||||
counts = [ranks.count(rank) for rank in set(ranks)]
|
||||
|
||||
if 4 in counts:
|
||||
|
||||
return 7, ranks[counts.index(4)]
|
||||
|
||||
if 3 in counts and 2 in counts:
|
||||
|
||||
return 6, ranks[counts.index(3)]
|
||||
|
||||
if flush:
|
||||
|
||||
return 5, ranks[-1]
|
||||
|
||||
if straight:
|
||||
|
||||
return 4, max(ranks)
|
||||
|
||||
if 3 in counts:
|
||||
|
||||
return 3, ranks[counts.index(3)]
|
||||
|
||||
if counts.count(2) == 2:
|
||||
|
||||
return 2, [ranks[i] for i in range(len(counts)) if counts[i] == 2][::-1]
|
||||
|
||||
if 2 in counts:
|
||||
|
||||
return 1, ranks[counts.index(2)]
|
||||
|
||||
return 0, ranks[-1]
|
||||
|
||||
|
||||
|
||||
def get_best_hand(board, hole):
|
||||
|
||||
best_hand = None
|
||||
|
||||
for comb in combinations(board + hole, 5):
|
||||
|
||||
hand_type, extra = get_hand_type(list(comb))
|
||||
|
||||
if not best_hand or (hand_type, extra) > best_hand:
|
||||
|
||||
best_hand = (hand_type, extra, list(comb))
|
||||
|
||||
return best_hand
|
||||
|
||||
|
||||
|
||||
def calculate_equity(players_holes, board=None, discards=None, trials=10000):
|
||||
|
||||
deck = Deck()
|
||||
|
||||
if board is None:
|
||||
|
||||
board = [deck.get_card() for _ in range(3)]
|
||||
|
||||
if discards is not None:
|
||||
|
||||
for card in discards:
|
||||
|
||||
deck.cards.remove(card)
|
||||
|
||||
for card in board + sum(players_holes, []):
|
||||
|
||||
deck.cards.remove(card)
|
||||
|
||||
wins = [0] * len(players_holes)
|
||||
|
||||
for _ in range(trials):
|
||||
|
||||
new_board = board + [deck.get_card() for _ in range(2)]
|
||||
|
||||
hands = [(get_best_hand(new_board, player_hole), i) for i, player_hole in enumerate(players_holes)]
|
||||
|
||||
winner = min(hands)[1]
|
||||
|
||||
wins[winner] += 1
|
||||
|
||||
return [round(win / trials, 4) for win in wins]
|
||||
|
||||
|
||||
|
||||
# Example usage
|
||||
|
||||
players_holes = [[0, 1], [2, 3], [4, 5]]
|
||||
|
||||
board = [6, 7, 8]
|
||||
|
||||
discards = [9, 10]
|
||||
|
||||
equity = calculate_equity(players_holes, board, discards)
|
||||
|
||||
print(equity)
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
This code defines a `Deck` class to represent the deck of cards, with a `get_card` method that returns the next card from the deck and removes it from the deck. It also defines a `get_card_name` function to convert a card index to a string representation of the card, and a `get_hand_type` function to determine the type and relative strength of a 5-card hand. The `get_best_hand` function takes a board and hole cards and returns the best 5-card hand that can be made from them. The `calculate_equity` function takes a list of players' hole cards, an optional board and discards, and a number of trials, and uses Monte Carlo simulation to estimate the equity of each player's hand.
|
||||
|
||||
|
||||
|
||||
To deal with situations where there are multiple players, external given part of the board cards, and extra discarded cards in the deck, the `calculate_equity` function takes additional arguments for the board and discards. The board cards and discards are removed from the deck before sampling new cards for the board or for each player's hole cards.
|
||||
|
||||
## Conversation
|
||||
|
||||
**ASSISTANT**: Here is a Python code to calculate Texas No Limit Holdem equity:
|
||||
@@ -534,4 +701,3 @@ This code calculates the equity of two players' hands in Texas No Limit Holdem,
|
||||
|
||||
The output of this code may vary because the equity calculation is based on Monte Carlo simulation, but it should be close to the correct equity values.
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user