April 26th, 2013 at 6:10:57 PM
permalink

Also, just to make sure I even understand the point of array1... this should have all the ways of making a straight, including the starting hand... meaning it *should* return 8 (four aces, four sixes)

#edit:

No, the correct answer is six, because this is a possible straight flush. That means there's only 6 flushes + 2 straight flushes. So they need to be ordered low to high.

#edit:

No, the correct answer is six, because this is a possible straight flush. That means there's only 6 flushes + 2 straight flushes. So they need to be ordered low to high.

April 26th, 2013 at 7:02:26 PM
permalink

Quote:ChrisEI think I've found where the error may be coming from, but I'm not sure why.

Debug.Log(array1[HandIndex4(0, 1, 2, 3)][STRAIGHT]);

Debug.Log(array1[HandIndex4(0, 2, 3, 1)][STRAIGHT]);

Debug.Log(array1[HandIndex4(0, 1, 3, 2)][STRAIGHT]);

So that's looking in array1 for how many straights there are. It should be the same for each because they are all suited 2, 3, 4, 5 just listed in a different order. Sadly, they're giving me the index numbers: 0, 20821, and 47 with the results of the debugs being:

6

0

8

This makes zero sense to me, and I have no clue what's going on at this point. Any ideas?

The method for finding a hand index relies on the hand being pre-sorted, so only the first one will point to the hand you are looking for, which is good because it contains the correct number of flushes.

I heart Crystal Math.

April 26th, 2013 at 8:03:22 PM
permalink

My hands are not sorted at all. This appears to be my issue. :(

April 26th, 2013 at 10:26:45 PM
permalink

Okay, hands all sorted... onto the next issue.

Once you have an array with the best possible outcome after taking all weights into consideration... how do you turn that into the payout percentage?

Once you have an array with the best possible outcome after taking all weights into consideration... how do you turn that into the payout percentage?

May 7th, 2013 at 11:40:54 PM
permalink

I'm working on writing a VP expected value code. I'm not sure about these steps. What should say array1 be? It is for holding 1 card. So we want to loop over 4 of the 5 cards something like this...

int HandIndex4(int c1, int c2, int c3, int c4)

{

int r;

r=combin_array[52][4]-combin_array[52-c1][4];

r+=combin_array[51-c1][3]-combin_array[52-c2][3];

r+=combin_array[51-c2][2]-combin_array[52-c3][2];

r+=combin_array[51-c3][1]-combin_array[52-c4][1];

return r;

}

for(int i=0;i<52;i++)

{

for(int j=i+i;j<52;j++)

{

for(int k=j+1;k<52;k++)

{

for(int l=k+1;l<52;l++)

{

//Calculate the index for these four cards

array1[HandIndex(i,j,k,l)][handscore]++;

// How do I get handscore??

// What do I put for the 5th card to fill out the hand

}}}}

Obviously I'm missing something with these arrays. How do I calculate the hand score?

Do I loop over all possible 5th cards? That would lead to looping over 2,598,960 hands to fill the array?

Thanks for any assistance you can provide.

/// from the wizard's page....

For each of the 5 ways to choose 4 out of 5 cards on the deal, translate the four cards into an index number from 0 to 270,724 (I'll explain how to do that later), and increment element [index number][hand score] of array1 by 1.

For each of the 10 ways to choose 3 out of 5 cards on the deal, translate the three cards into an index number from 0 to 22,099, and increment element [index number][hand score] of array2 by 1.

For each of the 10 ways to choose 2 out of 5 cards on the deal, translate the two cards into an index number from 0 to 1,325, and increment element [index number][hand score] of array3 by 1.

For each of the 5 ways to choose 1 out of 5 cards on the deal, translate the card into an index number from 0 to 51, and increment element [index number][hand score] of array4 by 1.

Increment element [hand score] of array5 by 1.

int HandIndex4(int c1, int c2, int c3, int c4)

{

int r;

r=combin_array[52][4]-combin_array[52-c1][4];

r+=combin_array[51-c1][3]-combin_array[52-c2][3];

r+=combin_array[51-c2][2]-combin_array[52-c3][2];

r+=combin_array[51-c3][1]-combin_array[52-c4][1];

return r;

}

for(int i=0;i<52;i++)

{

for(int j=i+i;j<52;j++)

{

for(int k=j+1;k<52;k++)

{

for(int l=k+1;l<52;l++)

{

//Calculate the index for these four cards

array1[HandIndex(i,j,k,l)][handscore]++;

// How do I get handscore??

// What do I put for the 5th card to fill out the hand

}}}}

Obviously I'm missing something with these arrays. How do I calculate the hand score?

Do I loop over all possible 5th cards? That would lead to looping over 2,598,960 hands to fill the array?

Thanks for any assistance you can provide.

/// from the wizard's page....

For each of the 5 ways to choose 4 out of 5 cards on the deal, translate the four cards into an index number from 0 to 270,724 (I'll explain how to do that later), and increment element [index number][hand score] of array1 by 1.

For each of the 10 ways to choose 3 out of 5 cards on the deal, translate the three cards into an index number from 0 to 22,099, and increment element [index number][hand score] of array2 by 1.

For each of the 10 ways to choose 2 out of 5 cards on the deal, translate the two cards into an index number from 0 to 1,325, and increment element [index number][hand score] of array3 by 1.

For each of the 5 ways to choose 1 out of 5 cards on the deal, translate the card into an index number from 0 to 51, and increment element [index number][hand score] of array4 by 1.

Increment element [hand score] of array5 by 1.

May 7th, 2013 at 11:49:08 PM
permalink

I'm still not getting this all, but I think this is what you're supposed to do for array1:

You're going through all hands. Each hand will be 5 cards. You want handIndex4 for each of the 5 ways you can organize those cards.

So you deal all cards as hand[ a ], hand[ b ], hand[ c ], hand[ d ], hand [ e ] (I'm going to write these as a, b, c, d, e for shorthand, but that should be hand[a], hand[e], etc.)

Then you do:

HandIndex4(a, b, c, d);

HandIndex4(a, b, c, e);

HandIndex4(a, b, d, e);

HandIndex4(a, c, d, e);

HandIndex4(b, c, d, e);

This is all five ways to choose 4 out of the 5 cards.

Remember, these have to be ordered to get it correct!

You're going through all hands. Each hand will be 5 cards. You want handIndex4 for each of the 5 ways you can organize those cards.

So you deal all cards as hand[ a ], hand[ b ], hand[ c ], hand[ d ], hand [ e ] (I'm going to write these as a, b, c, d, e for shorthand, but that should be hand[a], hand[e], etc.)

Then you do:

HandIndex4(a, b, c, d);

HandIndex4(a, b, c, e);

HandIndex4(a, b, d, e);

HandIndex4(a, c, d, e);

HandIndex4(b, c, d, e);

This is all five ways to choose 4 out of the 5 cards.

Remember, these have to be ordered to get it correct!

May 8th, 2013 at 12:14:45 AM
permalink

Thats fine for the HandIndex, but what about the hand value? That's the part I don't follow. And then again if you loop over all of them and then do it in the various orders it seems to be redundant. I thought that was the point of the weighting?

Looking at the vpgenius page it looks like you may do it the way you are talking about for the indexing then then use the handscore that you have in the main loop for all 5 cards. Not sure though.

//// from vpgenius

For each of the 5 individual cards, update the total number of hands of type H which include that card (Array #2).

Looking at the vpgenius page it looks like you may do it the way you are talking about for the indexing then then use the handscore that you have in the main loop for all 5 cards. Not sure though.

//// from vpgenius

For each of the 5 individual cards, update the total number of hands of type H which include that card (Array #2).

May 8th, 2013 at 12:20:15 AM
permalink

The hand value is the value of all five cards. What you're saying is that if you look up a, b, c, d... then a, b, c, d, e is one of the many possibilities of what you can draw (hence you increase a, b, c, d by one to represent drawing a, b, c, d, e.)

You don't do it for the various orders. You always order from smallest to largest.

You don't do it for the various orders. You always order from smallest to largest.

May 8th, 2013 at 12:32:28 AM
permalink

Giving it a try...will see how it goes. Thanks.