Need help iteratating over an array, retrieve two possibilites, no repeats, for Poker AI
Posted
by elguapo-85
on Stack Overflow
See other posts from Stack Overflow
or by elguapo-85
Published on 2010-05-11T08:31:06Z
Indexed on
2010/05/11
8:34 UTC
Read the original article
Hit count: 299
Can't really think of a good way to word this question, nor a good title, and maybe the answer is so ridiculously simple that I am missing it. I am working on a poker AI, and I want to calculate the number of hands that exist which are better then mine, I understand how to that, but want I can't figure out is the best way to iterate over a group of cards.
So I am at the flop, I know what my two cards are and there are 3 cards on the board. So there are 47 unknown cards and I want to iterate over all possible combination of those 47 cards assuming that two are passed out, so you can't have two cards of the same rank and suit, and you if you have previously calculated a set you don't want to do it over again, because I will being wasting time, and this will be called many times. If you don't understand want I am asking please tell me and I will clarify more. So I can set something up like this, if that element equals one, it means it is not in my hand and not on the board, 4 for each suit, and 13 for each rank. setOfCards[4][13]
//remove cards I know are in play from setOfCards by setting values to zero
for(int i = 0; i < 4; i++)
for(int j = 0; j < 13; j++)
for(int k = 0; k < 4; k++)
for(int l = 0; l < 4; l++)
//skip if values equal zero
card1 = setOfCards[i][j]
card2 = setOfCards[k][l]
//now compare card1, card2 and set of board cards
So this is actually going to repeat many values, for example: card1 = AceOfHearts, card2 = KingOfHearts is the same as card1 = KingOfHearts, card2 = AceOfHearts. It will also alter my calculations. How should I go about avoiding this? Also is there a name for this technique? Thank you.
© Stack Overflow or respective owner