Forming the best possible poker hand Announcing the arrival of Valued Associate #679: Cesar...
How discoverable are IPv6 addresses and AAAA names by potential attackers?
Should I discuss the type of campaign with my players?
How to align text above triangle figure
Why do people hide their license plates in the EU?
51k Euros annually for a family of 4 in Berlin: Is it enough?
Do I really need recursive chmod to restrict access to a folder?
What does this icon in iOS Stardew Valley mean?
Using et al. for a last / senior author rather than for a first author
Seeking colloquialism for “just because”
Apollo command module space walk?
Identifying polygons that intersect with another layer using QGIS?
Why did the Falcon Heavy center core fall off the ASDS OCISLY barge?
How to react to hostile behavior from a senior developer?
The logistics of corpse disposal
Okay to merge included columns on otherwise identical indexes?
Should I use a zero-interest credit card for a large one-time purchase?
How widely used is the term Treppenwitz? Is it something that most Germans know?
Is it true that "carbohydrates are of no use for the basal metabolic need"?
Using audio cues to encourage good posture
What causes the vertical darker bands in my photo?
Book where humans were engineered with genes from animal species to survive hostile planets
Dating a Former Employee
Why do we bend a book to keep it straight?
Can I cast Passwall to drop an enemy into a 20-foot pit?
Forming the best possible poker hand
Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)Tapes, Trees, Trunks & TalliesHow to get a centered mean (excluding max and min value) of a list in Python?Get argument as unicode string from argparse in Python 2 and 3Find and display best Poker handAlgorithm that receives a dictionary, converts it to a GET string, and is optimized for big dataSorting overlapping shells in dynamical simulation - for loops vs array methodshow to filter text from a string and convert it to dictionary and check for matching values in pythonControl the input of the user according to a sample string and get some info from itCompare an array with a file and form groups from elements of an array
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}
$begingroup$
This is what the function is doing: it gets two arrays of tuples with 5 items each - hand = [H1,H2,H3,H4,H5] and board = [B1,B2,B3,B4,B5]
What I need to do is check all arrays formed by 2 items from hand and 3 items from board, like combination = [Hn,Hm,Bi,Bj,Bk] (100 combinations in total)
Then I need to compare each one of the combinations against a dictionary to get the combination rank, and then return the best array (best rank) and the rank itself:
def check_hand(hand, board, dictionary_A, dictionary_B):
best_hand = []
first_int = True
for h1 in range (0, 4):
for h2 in range (h1+1, 5):
for b1 in range (0, 3):
for b2 in range (b1+1, 4):
for b3 in range (b2+1, 5):
hand_check = []
hand_check.append(hand[m1])
hand_check.append(hand[m2])
hand_check.append(board[b1])
hand_check.append(board[b2])
hand_check.append(board[b3])
hand_check = sort(hand_check) #Custom sort for my array of objects
hand_ranks = "".join([str(hand_check[0].rank),str(hand_check[1].rank),str(hand_check[2].rank),str(hand_check[3].rank),str(hand_check[4].rank)])
if (hand_check[0].suit == hand_check[1].suit and hand_check[1].suit == hand_check[2].suit and hand_check[2].suit == hand_check[3].suit and hand_check[3].suit == hand_check[4].suit):
control = [dictionary_A[hand_ranks][0],dictionary_A[hand_ranks][1]]
else:
control = [dictionary_B[hand_ranks][0],dictionary_B[hand_ranks][1]]
if first_int:
best_hand = hand_check
rank = control
first_int = False
elif (int(control[0]) > int(rank[0])):
rank = control
best_hand = hand_check
elif (int(control[0]) == int(rank[0])):
if (int(control[1]) > int(rank[1])):
rank = control
best_hand = hand_check
return best_hand, rank[0]
I need to run this check for 2 million different hands and interact over 1000 times for every hand (Ideally I would run it for at least 100000 times for every hand, for a more statistically accurate result).
Any ideas on how to make it more efficient?
Examples:
I added some "prints" on the way for better understanding:
Hand: Q♥K♥Q♠K♠3♦︎
Board: 2♣2♥J♦︎6♥4♦︎
2♣2♥J♦︎Q♥K♥ - 2♣2♥6♥Q♥K♥ - 2♣2♥4♦︎Q♥K♥ - 2♣6♥J♦︎Q♥K♥ - 2♣4♦︎J♦︎Q♥K♥ -
2♣4♦︎6♥Q♥K♥ - 2♥6♥J♦︎Q♥K♥ - 2♥4♦︎J♦︎Q♥K♥ - 2♥4♦︎6♥Q♥K♥ - 4♦︎6♥J♦︎Q♥K♥ -
2♣2♥J♦︎Q♥Q♠ - 2♣2♥6♥Q♥Q♠ - 2♣2♥4♦︎Q♥Q♠ - 2♣6♥J♦︎Q♥Q♠ - 2♣4♦︎J♦︎Q♥Q♠ -
2♣4♦︎6♥Q♥Q♠ - 2♥6♥J♦︎Q♥Q♠ - 2♥4♦︎J♦︎Q♥Q♠ - 2♥4♦︎6♥Q♥Q♠ - 4♦︎6♥J♦︎Q♥Q♠ -
2♣2♥J♦︎Q♥K♠ - 2♣2♥6♥Q♥K♠ - 2♣2♥4♦︎Q♥K♠ - 2♣6♥J♦︎Q♥K♠ - 2♣4♦︎J♦︎Q♥K♠ -
2♣4♦︎6♥Q♥K♠ - 2♥6♥J♦︎Q♥K♠ - 2♥4♦︎J♦︎Q♥K♠ - 2♥4♦︎6♥Q♥K♠ - 4♦︎6♥J♦︎Q♥K♠ -
2♣2♥3♦︎J♦︎Q♥ - 2♣2♥3♦︎6♥Q♥ - 2♣2♥3♦︎4♦︎Q♥ - 2♣3♦︎6♥J♦︎Q♥ - 2♣3♦︎4♦︎J♦︎Q♥ -
2♣3♦︎4♦︎6♥Q♥ - 2♥3♦︎6♥J♦︎Q♥ - 2♥3♦︎4♦︎J♦︎Q♥ - 2♥3♦︎4♦︎6♥Q♥ - 3♦︎4♦︎6♥J♦︎Q♥ -
2♣2♥J♦︎Q♠K♥ - 2♣2♥6♥Q♠K♥ - 2♣2♥4♦︎Q♠K♥ - 2♣6♥J♦︎Q♠K♥ - 2♣4♦︎J♦︎Q♠K♥ -
2♣4♦︎6♥Q♠K♥ - 2♥6♥J♦︎Q♠K♥ - 2♥4♦︎J♦︎Q♠K♥ - 2♥4♦︎6♥Q♠K♥ - 4♦︎6♥J♦︎Q♠K♥ -
2♣2♥J♦︎K♥K♠ - 2♣2♥6♥K♥K♠ - 2♣2♥4♦︎K♥K♠ - 2♣6♥J♦︎K♥K♠ - 2♣4♦︎J♦︎K♥K♠ -
2♣4♦︎6♥K♥K♠ - 2♥6♥J♦︎K♥K♠ - 2♥4♦︎J♦︎K♥K♠ - 2♥4♦︎6♥K♥K♠ - 4♦︎6♥J♦︎K♥K♠ -
2♣2♥3♦︎J♦︎K♥ - 2♣2♥3♦︎6♥K♥ - 2♣2♥3♦︎4♦︎K♥ - 2♣3♦︎6♥J♦︎K♥ - 2♣3♦︎4♦︎J♦︎K♥ -
2♣3♦︎4♦︎6♥K♥ - 2♥3♦︎6♥J♦︎K♥ - 2♥3♦︎4♦︎J♦︎K♥ - 2♥3♦︎4♦︎6♥K♥ - 3♦︎4♦︎6♥J♦︎K♥ -
2♣2♥J♦︎Q♠K♠ - 2♣2♥6♥Q♠K♠ - 2♣2♥4♦︎Q♠K♠ - 2♣6♥J♦︎Q♠K♠ - 2♣4♦︎J♦︎Q♠K♠ -
2♣4♦︎6♥Q♠K♠ - 2♥6♥J♦︎Q♠K♠ - 2♥4♦︎J♦︎Q♠K♠ - 2♥4♦︎6♥Q♠K♠ - 4♦︎6♥J♦︎Q♠K♠ -
2♣2♥3♦︎J♦︎Q♠ - 2♣2♥3♦︎6♥Q♠ - 2♣2♥3♦︎4♦︎Q♠ - 2♣3♦︎6♥J♦︎Q♠ - 2♣3♦︎4♦︎J♦︎Q♠ -
2♣3♦︎4♦︎6♥Q♠ - 2♥3♦︎6♥J♦︎Q♠ - 2♥3♦︎4♦︎J♦︎Q♠ - 2♥3♦︎4♦︎6♥Q♠ - 3♦︎4♦︎6♥J♦︎Q♠ -
2♣2♥3♦︎J♦︎K♠ - 2♣2♥3♦︎6♥K♠ - 2♣2♥3♦︎4♦︎K♠ - 2♣3♦︎6♥J♦︎K♠ - 2♣3♦︎4♦︎J♦︎K♠ -
2♣3♦︎4♦︎6♥K♠ - 2♥3♦︎6♥J♦︎K♠ - 2♥3♦︎4♦︎J♦︎K♠ - 2♥3♦︎4♦︎6♥K♠ - 3♦︎4♦︎6♥J♦︎K♠ -
Best Hand: 2♣2♥J♦︎K♥K♠ Rank: 3
Just wondering if there is a way to run the piece of code below more efficiently. I just started to get acquainted with parallel program and think this might be an answer? But I have no idea how to do it using imap or processes.
python performance playing-cards
New contributor
$endgroup$
add a comment |
$begingroup$
This is what the function is doing: it gets two arrays of tuples with 5 items each - hand = [H1,H2,H3,H4,H5] and board = [B1,B2,B3,B4,B5]
What I need to do is check all arrays formed by 2 items from hand and 3 items from board, like combination = [Hn,Hm,Bi,Bj,Bk] (100 combinations in total)
Then I need to compare each one of the combinations against a dictionary to get the combination rank, and then return the best array (best rank) and the rank itself:
def check_hand(hand, board, dictionary_A, dictionary_B):
best_hand = []
first_int = True
for h1 in range (0, 4):
for h2 in range (h1+1, 5):
for b1 in range (0, 3):
for b2 in range (b1+1, 4):
for b3 in range (b2+1, 5):
hand_check = []
hand_check.append(hand[m1])
hand_check.append(hand[m2])
hand_check.append(board[b1])
hand_check.append(board[b2])
hand_check.append(board[b3])
hand_check = sort(hand_check) #Custom sort for my array of objects
hand_ranks = "".join([str(hand_check[0].rank),str(hand_check[1].rank),str(hand_check[2].rank),str(hand_check[3].rank),str(hand_check[4].rank)])
if (hand_check[0].suit == hand_check[1].suit and hand_check[1].suit == hand_check[2].suit and hand_check[2].suit == hand_check[3].suit and hand_check[3].suit == hand_check[4].suit):
control = [dictionary_A[hand_ranks][0],dictionary_A[hand_ranks][1]]
else:
control = [dictionary_B[hand_ranks][0],dictionary_B[hand_ranks][1]]
if first_int:
best_hand = hand_check
rank = control
first_int = False
elif (int(control[0]) > int(rank[0])):
rank = control
best_hand = hand_check
elif (int(control[0]) == int(rank[0])):
if (int(control[1]) > int(rank[1])):
rank = control
best_hand = hand_check
return best_hand, rank[0]
I need to run this check for 2 million different hands and interact over 1000 times for every hand (Ideally I would run it for at least 100000 times for every hand, for a more statistically accurate result).
Any ideas on how to make it more efficient?
Examples:
I added some "prints" on the way for better understanding:
Hand: Q♥K♥Q♠K♠3♦︎
Board: 2♣2♥J♦︎6♥4♦︎
2♣2♥J♦︎Q♥K♥ - 2♣2♥6♥Q♥K♥ - 2♣2♥4♦︎Q♥K♥ - 2♣6♥J♦︎Q♥K♥ - 2♣4♦︎J♦︎Q♥K♥ -
2♣4♦︎6♥Q♥K♥ - 2♥6♥J♦︎Q♥K♥ - 2♥4♦︎J♦︎Q♥K♥ - 2♥4♦︎6♥Q♥K♥ - 4♦︎6♥J♦︎Q♥K♥ -
2♣2♥J♦︎Q♥Q♠ - 2♣2♥6♥Q♥Q♠ - 2♣2♥4♦︎Q♥Q♠ - 2♣6♥J♦︎Q♥Q♠ - 2♣4♦︎J♦︎Q♥Q♠ -
2♣4♦︎6♥Q♥Q♠ - 2♥6♥J♦︎Q♥Q♠ - 2♥4♦︎J♦︎Q♥Q♠ - 2♥4♦︎6♥Q♥Q♠ - 4♦︎6♥J♦︎Q♥Q♠ -
2♣2♥J♦︎Q♥K♠ - 2♣2♥6♥Q♥K♠ - 2♣2♥4♦︎Q♥K♠ - 2♣6♥J♦︎Q♥K♠ - 2♣4♦︎J♦︎Q♥K♠ -
2♣4♦︎6♥Q♥K♠ - 2♥6♥J♦︎Q♥K♠ - 2♥4♦︎J♦︎Q♥K♠ - 2♥4♦︎6♥Q♥K♠ - 4♦︎6♥J♦︎Q♥K♠ -
2♣2♥3♦︎J♦︎Q♥ - 2♣2♥3♦︎6♥Q♥ - 2♣2♥3♦︎4♦︎Q♥ - 2♣3♦︎6♥J♦︎Q♥ - 2♣3♦︎4♦︎J♦︎Q♥ -
2♣3♦︎4♦︎6♥Q♥ - 2♥3♦︎6♥J♦︎Q♥ - 2♥3♦︎4♦︎J♦︎Q♥ - 2♥3♦︎4♦︎6♥Q♥ - 3♦︎4♦︎6♥J♦︎Q♥ -
2♣2♥J♦︎Q♠K♥ - 2♣2♥6♥Q♠K♥ - 2♣2♥4♦︎Q♠K♥ - 2♣6♥J♦︎Q♠K♥ - 2♣4♦︎J♦︎Q♠K♥ -
2♣4♦︎6♥Q♠K♥ - 2♥6♥J♦︎Q♠K♥ - 2♥4♦︎J♦︎Q♠K♥ - 2♥4♦︎6♥Q♠K♥ - 4♦︎6♥J♦︎Q♠K♥ -
2♣2♥J♦︎K♥K♠ - 2♣2♥6♥K♥K♠ - 2♣2♥4♦︎K♥K♠ - 2♣6♥J♦︎K♥K♠ - 2♣4♦︎J♦︎K♥K♠ -
2♣4♦︎6♥K♥K♠ - 2♥6♥J♦︎K♥K♠ - 2♥4♦︎J♦︎K♥K♠ - 2♥4♦︎6♥K♥K♠ - 4♦︎6♥J♦︎K♥K♠ -
2♣2♥3♦︎J♦︎K♥ - 2♣2♥3♦︎6♥K♥ - 2♣2♥3♦︎4♦︎K♥ - 2♣3♦︎6♥J♦︎K♥ - 2♣3♦︎4♦︎J♦︎K♥ -
2♣3♦︎4♦︎6♥K♥ - 2♥3♦︎6♥J♦︎K♥ - 2♥3♦︎4♦︎J♦︎K♥ - 2♥3♦︎4♦︎6♥K♥ - 3♦︎4♦︎6♥J♦︎K♥ -
2♣2♥J♦︎Q♠K♠ - 2♣2♥6♥Q♠K♠ - 2♣2♥4♦︎Q♠K♠ - 2♣6♥J♦︎Q♠K♠ - 2♣4♦︎J♦︎Q♠K♠ -
2♣4♦︎6♥Q♠K♠ - 2♥6♥J♦︎Q♠K♠ - 2♥4♦︎J♦︎Q♠K♠ - 2♥4♦︎6♥Q♠K♠ - 4♦︎6♥J♦︎Q♠K♠ -
2♣2♥3♦︎J♦︎Q♠ - 2♣2♥3♦︎6♥Q♠ - 2♣2♥3♦︎4♦︎Q♠ - 2♣3♦︎6♥J♦︎Q♠ - 2♣3♦︎4♦︎J♦︎Q♠ -
2♣3♦︎4♦︎6♥Q♠ - 2♥3♦︎6♥J♦︎Q♠ - 2♥3♦︎4♦︎J♦︎Q♠ - 2♥3♦︎4♦︎6♥Q♠ - 3♦︎4♦︎6♥J♦︎Q♠ -
2♣2♥3♦︎J♦︎K♠ - 2♣2♥3♦︎6♥K♠ - 2♣2♥3♦︎4♦︎K♠ - 2♣3♦︎6♥J♦︎K♠ - 2♣3♦︎4♦︎J♦︎K♠ -
2♣3♦︎4♦︎6♥K♠ - 2♥3♦︎6♥J♦︎K♠ - 2♥3♦︎4♦︎J♦︎K♠ - 2♥3♦︎4♦︎6♥K♠ - 3♦︎4♦︎6♥J♦︎K♠ -
Best Hand: 2♣2♥J♦︎K♥K♠ Rank: 3
Just wondering if there is a way to run the piece of code below more efficiently. I just started to get acquainted with parallel program and think this might be an answer? But I have no idea how to do it using imap or processes.
python performance playing-cards
New contributor
$endgroup$
1
$begingroup$
Welcome to Code Review. Is this real working Python code? (Introducing a comment with//
is not syntactically valid.) What'smao
? Also, please provide some example inputs and outputs so that we can better understand what this code accomplishes.
$endgroup$
– 200_success
2 hours ago
$begingroup$
The comment is not in the original code. It is a working code. What I am trying to accomplish is to find a better way to interact 100 times between hand and board. I updated the original post with examples.
$endgroup$
– Vandré Dreer Bonaite
1 hour ago
$begingroup$
In your example, 2s5h3sTc looks like an incomplete combination. Also, you still haven't explained whatmao[m1]
is.
$endgroup$
– 200_success
1 hour ago
$begingroup$
Yes, it was incomplete. And mao = hand (also updated that).
$endgroup$
– Vandré Dreer Bonaite
27 mins ago
add a comment |
$begingroup$
This is what the function is doing: it gets two arrays of tuples with 5 items each - hand = [H1,H2,H3,H4,H5] and board = [B1,B2,B3,B4,B5]
What I need to do is check all arrays formed by 2 items from hand and 3 items from board, like combination = [Hn,Hm,Bi,Bj,Bk] (100 combinations in total)
Then I need to compare each one of the combinations against a dictionary to get the combination rank, and then return the best array (best rank) and the rank itself:
def check_hand(hand, board, dictionary_A, dictionary_B):
best_hand = []
first_int = True
for h1 in range (0, 4):
for h2 in range (h1+1, 5):
for b1 in range (0, 3):
for b2 in range (b1+1, 4):
for b3 in range (b2+1, 5):
hand_check = []
hand_check.append(hand[m1])
hand_check.append(hand[m2])
hand_check.append(board[b1])
hand_check.append(board[b2])
hand_check.append(board[b3])
hand_check = sort(hand_check) #Custom sort for my array of objects
hand_ranks = "".join([str(hand_check[0].rank),str(hand_check[1].rank),str(hand_check[2].rank),str(hand_check[3].rank),str(hand_check[4].rank)])
if (hand_check[0].suit == hand_check[1].suit and hand_check[1].suit == hand_check[2].suit and hand_check[2].suit == hand_check[3].suit and hand_check[3].suit == hand_check[4].suit):
control = [dictionary_A[hand_ranks][0],dictionary_A[hand_ranks][1]]
else:
control = [dictionary_B[hand_ranks][0],dictionary_B[hand_ranks][1]]
if first_int:
best_hand = hand_check
rank = control
first_int = False
elif (int(control[0]) > int(rank[0])):
rank = control
best_hand = hand_check
elif (int(control[0]) == int(rank[0])):
if (int(control[1]) > int(rank[1])):
rank = control
best_hand = hand_check
return best_hand, rank[0]
I need to run this check for 2 million different hands and interact over 1000 times for every hand (Ideally I would run it for at least 100000 times for every hand, for a more statistically accurate result).
Any ideas on how to make it more efficient?
Examples:
I added some "prints" on the way for better understanding:
Hand: Q♥K♥Q♠K♠3♦︎
Board: 2♣2♥J♦︎6♥4♦︎
2♣2♥J♦︎Q♥K♥ - 2♣2♥6♥Q♥K♥ - 2♣2♥4♦︎Q♥K♥ - 2♣6♥J♦︎Q♥K♥ - 2♣4♦︎J♦︎Q♥K♥ -
2♣4♦︎6♥Q♥K♥ - 2♥6♥J♦︎Q♥K♥ - 2♥4♦︎J♦︎Q♥K♥ - 2♥4♦︎6♥Q♥K♥ - 4♦︎6♥J♦︎Q♥K♥ -
2♣2♥J♦︎Q♥Q♠ - 2♣2♥6♥Q♥Q♠ - 2♣2♥4♦︎Q♥Q♠ - 2♣6♥J♦︎Q♥Q♠ - 2♣4♦︎J♦︎Q♥Q♠ -
2♣4♦︎6♥Q♥Q♠ - 2♥6♥J♦︎Q♥Q♠ - 2♥4♦︎J♦︎Q♥Q♠ - 2♥4♦︎6♥Q♥Q♠ - 4♦︎6♥J♦︎Q♥Q♠ -
2♣2♥J♦︎Q♥K♠ - 2♣2♥6♥Q♥K♠ - 2♣2♥4♦︎Q♥K♠ - 2♣6♥J♦︎Q♥K♠ - 2♣4♦︎J♦︎Q♥K♠ -
2♣4♦︎6♥Q♥K♠ - 2♥6♥J♦︎Q♥K♠ - 2♥4♦︎J♦︎Q♥K♠ - 2♥4♦︎6♥Q♥K♠ - 4♦︎6♥J♦︎Q♥K♠ -
2♣2♥3♦︎J♦︎Q♥ - 2♣2♥3♦︎6♥Q♥ - 2♣2♥3♦︎4♦︎Q♥ - 2♣3♦︎6♥J♦︎Q♥ - 2♣3♦︎4♦︎J♦︎Q♥ -
2♣3♦︎4♦︎6♥Q♥ - 2♥3♦︎6♥J♦︎Q♥ - 2♥3♦︎4♦︎J♦︎Q♥ - 2♥3♦︎4♦︎6♥Q♥ - 3♦︎4♦︎6♥J♦︎Q♥ -
2♣2♥J♦︎Q♠K♥ - 2♣2♥6♥Q♠K♥ - 2♣2♥4♦︎Q♠K♥ - 2♣6♥J♦︎Q♠K♥ - 2♣4♦︎J♦︎Q♠K♥ -
2♣4♦︎6♥Q♠K♥ - 2♥6♥J♦︎Q♠K♥ - 2♥4♦︎J♦︎Q♠K♥ - 2♥4♦︎6♥Q♠K♥ - 4♦︎6♥J♦︎Q♠K♥ -
2♣2♥J♦︎K♥K♠ - 2♣2♥6♥K♥K♠ - 2♣2♥4♦︎K♥K♠ - 2♣6♥J♦︎K♥K♠ - 2♣4♦︎J♦︎K♥K♠ -
2♣4♦︎6♥K♥K♠ - 2♥6♥J♦︎K♥K♠ - 2♥4♦︎J♦︎K♥K♠ - 2♥4♦︎6♥K♥K♠ - 4♦︎6♥J♦︎K♥K♠ -
2♣2♥3♦︎J♦︎K♥ - 2♣2♥3♦︎6♥K♥ - 2♣2♥3♦︎4♦︎K♥ - 2♣3♦︎6♥J♦︎K♥ - 2♣3♦︎4♦︎J♦︎K♥ -
2♣3♦︎4♦︎6♥K♥ - 2♥3♦︎6♥J♦︎K♥ - 2♥3♦︎4♦︎J♦︎K♥ - 2♥3♦︎4♦︎6♥K♥ - 3♦︎4♦︎6♥J♦︎K♥ -
2♣2♥J♦︎Q♠K♠ - 2♣2♥6♥Q♠K♠ - 2♣2♥4♦︎Q♠K♠ - 2♣6♥J♦︎Q♠K♠ - 2♣4♦︎J♦︎Q♠K♠ -
2♣4♦︎6♥Q♠K♠ - 2♥6♥J♦︎Q♠K♠ - 2♥4♦︎J♦︎Q♠K♠ - 2♥4♦︎6♥Q♠K♠ - 4♦︎6♥J♦︎Q♠K♠ -
2♣2♥3♦︎J♦︎Q♠ - 2♣2♥3♦︎6♥Q♠ - 2♣2♥3♦︎4♦︎Q♠ - 2♣3♦︎6♥J♦︎Q♠ - 2♣3♦︎4♦︎J♦︎Q♠ -
2♣3♦︎4♦︎6♥Q♠ - 2♥3♦︎6♥J♦︎Q♠ - 2♥3♦︎4♦︎J♦︎Q♠ - 2♥3♦︎4♦︎6♥Q♠ - 3♦︎4♦︎6♥J♦︎Q♠ -
2♣2♥3♦︎J♦︎K♠ - 2♣2♥3♦︎6♥K♠ - 2♣2♥3♦︎4♦︎K♠ - 2♣3♦︎6♥J♦︎K♠ - 2♣3♦︎4♦︎J♦︎K♠ -
2♣3♦︎4♦︎6♥K♠ - 2♥3♦︎6♥J♦︎K♠ - 2♥3♦︎4♦︎J♦︎K♠ - 2♥3♦︎4♦︎6♥K♠ - 3♦︎4♦︎6♥J♦︎K♠ -
Best Hand: 2♣2♥J♦︎K♥K♠ Rank: 3
Just wondering if there is a way to run the piece of code below more efficiently. I just started to get acquainted with parallel program and think this might be an answer? But I have no idea how to do it using imap or processes.
python performance playing-cards
New contributor
$endgroup$
This is what the function is doing: it gets two arrays of tuples with 5 items each - hand = [H1,H2,H3,H4,H5] and board = [B1,B2,B3,B4,B5]
What I need to do is check all arrays formed by 2 items from hand and 3 items from board, like combination = [Hn,Hm,Bi,Bj,Bk] (100 combinations in total)
Then I need to compare each one of the combinations against a dictionary to get the combination rank, and then return the best array (best rank) and the rank itself:
def check_hand(hand, board, dictionary_A, dictionary_B):
best_hand = []
first_int = True
for h1 in range (0, 4):
for h2 in range (h1+1, 5):
for b1 in range (0, 3):
for b2 in range (b1+1, 4):
for b3 in range (b2+1, 5):
hand_check = []
hand_check.append(hand[m1])
hand_check.append(hand[m2])
hand_check.append(board[b1])
hand_check.append(board[b2])
hand_check.append(board[b3])
hand_check = sort(hand_check) #Custom sort for my array of objects
hand_ranks = "".join([str(hand_check[0].rank),str(hand_check[1].rank),str(hand_check[2].rank),str(hand_check[3].rank),str(hand_check[4].rank)])
if (hand_check[0].suit == hand_check[1].suit and hand_check[1].suit == hand_check[2].suit and hand_check[2].suit == hand_check[3].suit and hand_check[3].suit == hand_check[4].suit):
control = [dictionary_A[hand_ranks][0],dictionary_A[hand_ranks][1]]
else:
control = [dictionary_B[hand_ranks][0],dictionary_B[hand_ranks][1]]
if first_int:
best_hand = hand_check
rank = control
first_int = False
elif (int(control[0]) > int(rank[0])):
rank = control
best_hand = hand_check
elif (int(control[0]) == int(rank[0])):
if (int(control[1]) > int(rank[1])):
rank = control
best_hand = hand_check
return best_hand, rank[0]
I need to run this check for 2 million different hands and interact over 1000 times for every hand (Ideally I would run it for at least 100000 times for every hand, for a more statistically accurate result).
Any ideas on how to make it more efficient?
Examples:
I added some "prints" on the way for better understanding:
Hand: Q♥K♥Q♠K♠3♦︎
Board: 2♣2♥J♦︎6♥4♦︎
2♣2♥J♦︎Q♥K♥ - 2♣2♥6♥Q♥K♥ - 2♣2♥4♦︎Q♥K♥ - 2♣6♥J♦︎Q♥K♥ - 2♣4♦︎J♦︎Q♥K♥ -
2♣4♦︎6♥Q♥K♥ - 2♥6♥J♦︎Q♥K♥ - 2♥4♦︎J♦︎Q♥K♥ - 2♥4♦︎6♥Q♥K♥ - 4♦︎6♥J♦︎Q♥K♥ -
2♣2♥J♦︎Q♥Q♠ - 2♣2♥6♥Q♥Q♠ - 2♣2♥4♦︎Q♥Q♠ - 2♣6♥J♦︎Q♥Q♠ - 2♣4♦︎J♦︎Q♥Q♠ -
2♣4♦︎6♥Q♥Q♠ - 2♥6♥J♦︎Q♥Q♠ - 2♥4♦︎J♦︎Q♥Q♠ - 2♥4♦︎6♥Q♥Q♠ - 4♦︎6♥J♦︎Q♥Q♠ -
2♣2♥J♦︎Q♥K♠ - 2♣2♥6♥Q♥K♠ - 2♣2♥4♦︎Q♥K♠ - 2♣6♥J♦︎Q♥K♠ - 2♣4♦︎J♦︎Q♥K♠ -
2♣4♦︎6♥Q♥K♠ - 2♥6♥J♦︎Q♥K♠ - 2♥4♦︎J♦︎Q♥K♠ - 2♥4♦︎6♥Q♥K♠ - 4♦︎6♥J♦︎Q♥K♠ -
2♣2♥3♦︎J♦︎Q♥ - 2♣2♥3♦︎6♥Q♥ - 2♣2♥3♦︎4♦︎Q♥ - 2♣3♦︎6♥J♦︎Q♥ - 2♣3♦︎4♦︎J♦︎Q♥ -
2♣3♦︎4♦︎6♥Q♥ - 2♥3♦︎6♥J♦︎Q♥ - 2♥3♦︎4♦︎J♦︎Q♥ - 2♥3♦︎4♦︎6♥Q♥ - 3♦︎4♦︎6♥J♦︎Q♥ -
2♣2♥J♦︎Q♠K♥ - 2♣2♥6♥Q♠K♥ - 2♣2♥4♦︎Q♠K♥ - 2♣6♥J♦︎Q♠K♥ - 2♣4♦︎J♦︎Q♠K♥ -
2♣4♦︎6♥Q♠K♥ - 2♥6♥J♦︎Q♠K♥ - 2♥4♦︎J♦︎Q♠K♥ - 2♥4♦︎6♥Q♠K♥ - 4♦︎6♥J♦︎Q♠K♥ -
2♣2♥J♦︎K♥K♠ - 2♣2♥6♥K♥K♠ - 2♣2♥4♦︎K♥K♠ - 2♣6♥J♦︎K♥K♠ - 2♣4♦︎J♦︎K♥K♠ -
2♣4♦︎6♥K♥K♠ - 2♥6♥J♦︎K♥K♠ - 2♥4♦︎J♦︎K♥K♠ - 2♥4♦︎6♥K♥K♠ - 4♦︎6♥J♦︎K♥K♠ -
2♣2♥3♦︎J♦︎K♥ - 2♣2♥3♦︎6♥K♥ - 2♣2♥3♦︎4♦︎K♥ - 2♣3♦︎6♥J♦︎K♥ - 2♣3♦︎4♦︎J♦︎K♥ -
2♣3♦︎4♦︎6♥K♥ - 2♥3♦︎6♥J♦︎K♥ - 2♥3♦︎4♦︎J♦︎K♥ - 2♥3♦︎4♦︎6♥K♥ - 3♦︎4♦︎6♥J♦︎K♥ -
2♣2♥J♦︎Q♠K♠ - 2♣2♥6♥Q♠K♠ - 2♣2♥4♦︎Q♠K♠ - 2♣6♥J♦︎Q♠K♠ - 2♣4♦︎J♦︎Q♠K♠ -
2♣4♦︎6♥Q♠K♠ - 2♥6♥J♦︎Q♠K♠ - 2♥4♦︎J♦︎Q♠K♠ - 2♥4♦︎6♥Q♠K♠ - 4♦︎6♥J♦︎Q♠K♠ -
2♣2♥3♦︎J♦︎Q♠ - 2♣2♥3♦︎6♥Q♠ - 2♣2♥3♦︎4♦︎Q♠ - 2♣3♦︎6♥J♦︎Q♠ - 2♣3♦︎4♦︎J♦︎Q♠ -
2♣3♦︎4♦︎6♥Q♠ - 2♥3♦︎6♥J♦︎Q♠ - 2♥3♦︎4♦︎J♦︎Q♠ - 2♥3♦︎4♦︎6♥Q♠ - 3♦︎4♦︎6♥J♦︎Q♠ -
2♣2♥3♦︎J♦︎K♠ - 2♣2♥3♦︎6♥K♠ - 2♣2♥3♦︎4♦︎K♠ - 2♣3♦︎6♥J♦︎K♠ - 2♣3♦︎4♦︎J♦︎K♠ -
2♣3♦︎4♦︎6♥K♠ - 2♥3♦︎6♥J♦︎K♠ - 2♥3♦︎4♦︎J♦︎K♠ - 2♥3♦︎4♦︎6♥K♠ - 3♦︎4♦︎6♥J♦︎K♠ -
Best Hand: 2♣2♥J♦︎K♥K♠ Rank: 3
Just wondering if there is a way to run the piece of code below more efficiently. I just started to get acquainted with parallel program and think this might be an answer? But I have no idea how to do it using imap or processes.
python performance playing-cards
python performance playing-cards
New contributor
New contributor
edited 30 secs ago
200_success
131k17157422
131k17157422
New contributor
asked 2 hours ago
Vandré Dreer BonaiteVandré Dreer Bonaite
62
62
New contributor
New contributor
1
$begingroup$
Welcome to Code Review. Is this real working Python code? (Introducing a comment with//
is not syntactically valid.) What'smao
? Also, please provide some example inputs and outputs so that we can better understand what this code accomplishes.
$endgroup$
– 200_success
2 hours ago
$begingroup$
The comment is not in the original code. It is a working code. What I am trying to accomplish is to find a better way to interact 100 times between hand and board. I updated the original post with examples.
$endgroup$
– Vandré Dreer Bonaite
1 hour ago
$begingroup$
In your example, 2s5h3sTc looks like an incomplete combination. Also, you still haven't explained whatmao[m1]
is.
$endgroup$
– 200_success
1 hour ago
$begingroup$
Yes, it was incomplete. And mao = hand (also updated that).
$endgroup$
– Vandré Dreer Bonaite
27 mins ago
add a comment |
1
$begingroup$
Welcome to Code Review. Is this real working Python code? (Introducing a comment with//
is not syntactically valid.) What'smao
? Also, please provide some example inputs and outputs so that we can better understand what this code accomplishes.
$endgroup$
– 200_success
2 hours ago
$begingroup$
The comment is not in the original code. It is a working code. What I am trying to accomplish is to find a better way to interact 100 times between hand and board. I updated the original post with examples.
$endgroup$
– Vandré Dreer Bonaite
1 hour ago
$begingroup$
In your example, 2s5h3sTc looks like an incomplete combination. Also, you still haven't explained whatmao[m1]
is.
$endgroup$
– 200_success
1 hour ago
$begingroup$
Yes, it was incomplete. And mao = hand (also updated that).
$endgroup$
– Vandré Dreer Bonaite
27 mins ago
1
1
$begingroup$
Welcome to Code Review. Is this real working Python code? (Introducing a comment with
//
is not syntactically valid.) What's mao
? Also, please provide some example inputs and outputs so that we can better understand what this code accomplishes.$endgroup$
– 200_success
2 hours ago
$begingroup$
Welcome to Code Review. Is this real working Python code? (Introducing a comment with
//
is not syntactically valid.) What's mao
? Also, please provide some example inputs and outputs so that we can better understand what this code accomplishes.$endgroup$
– 200_success
2 hours ago
$begingroup$
The comment is not in the original code. It is a working code. What I am trying to accomplish is to find a better way to interact 100 times between hand and board. I updated the original post with examples.
$endgroup$
– Vandré Dreer Bonaite
1 hour ago
$begingroup$
The comment is not in the original code. It is a working code. What I am trying to accomplish is to find a better way to interact 100 times between hand and board. I updated the original post with examples.
$endgroup$
– Vandré Dreer Bonaite
1 hour ago
$begingroup$
In your example, 2s5h3sTc looks like an incomplete combination. Also, you still haven't explained what
mao[m1]
is.$endgroup$
– 200_success
1 hour ago
$begingroup$
In your example, 2s5h3sTc looks like an incomplete combination. Also, you still haven't explained what
mao[m1]
is.$endgroup$
– 200_success
1 hour ago
$begingroup$
Yes, it was incomplete. And mao = hand (also updated that).
$endgroup$
– Vandré Dreer Bonaite
27 mins ago
$begingroup$
Yes, it was incomplete. And mao = hand (also updated that).
$endgroup$
– Vandré Dreer Bonaite
27 mins ago
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "196"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Vandré Dreer Bonaite is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f217597%2fforming-the-best-possible-poker-hand%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Vandré Dreer Bonaite is a new contributor. Be nice, and check out our Code of Conduct.
Vandré Dreer Bonaite is a new contributor. Be nice, and check out our Code of Conduct.
Vandré Dreer Bonaite is a new contributor. Be nice, and check out our Code of Conduct.
Vandré Dreer Bonaite is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f217597%2fforming-the-best-possible-poker-hand%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
$begingroup$
Welcome to Code Review. Is this real working Python code? (Introducing a comment with
//
is not syntactically valid.) What'smao
? Also, please provide some example inputs and outputs so that we can better understand what this code accomplishes.$endgroup$
– 200_success
2 hours ago
$begingroup$
The comment is not in the original code. It is a working code. What I am trying to accomplish is to find a better way to interact 100 times between hand and board. I updated the original post with examples.
$endgroup$
– Vandré Dreer Bonaite
1 hour ago
$begingroup$
In your example, 2s5h3sTc looks like an incomplete combination. Also, you still haven't explained what
mao[m1]
is.$endgroup$
– 200_success
1 hour ago
$begingroup$
Yes, it was incomplete. And mao = hand (also updated that).
$endgroup$
– Vandré Dreer Bonaite
27 mins ago