Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as C++ by Kot ( 16 years ago )
#include "flop.h"
#include <map>
using namespace std;
int evalEq (int a, int b, int c, int d, int e)
{
int ret = 0;
std::map <int, int> mCard;
mCard[a]++;
mCard[b]++;
mCard[c]++;
mCard[d]++;
mCard[e]++;
bool threeOfaKind = false;
int pairs = 0;
for (map <int, int>::const_iterator i = mCard.begin (); i != mCard.end (); ++i) {
if (i->second == 4)
return FLOP_EQ::QUADS;
else if (i->second == 3)
threeOfaKind = true;
else if (i->second == 2)
++pairs;
}
if (threeOfaKind && pairs) {
ret = FLOP_EQ::FULL_HOUSE;
if (d == e && mCard.find (d)->second == 3)
ret |= FLOP_EQ::SET;
return ret;
} else if (threeOfaKind) {
if (d == e && mCard.find (d)->second == 3)
ret |= FLOP_EQ::SET;
else if (a != b || a != c || b != c)
ret |= FLOP_EQ::TRIPS;
} else if (pairs) {
if (e == c)
ret |= FLOP_EQ::TOP_PAIR;
if (a != b && a != c && b != c && pairs == 2)
ret |= FLOP_EQ::TWO_PAIR;
if (d == e && d > c)
ret |= FLOP_EQ::OVERPAIR;
if (mCard.find (d)->second == 2 || mCard.find (e)->second == 2)
ret |= FLOP_EQ::PAIR;
}
if (d > c) {
ret |= FLOP_EQ::TWO_OVERCARD;
} else if (e > c) {
ret |= FLOP_EQ::OVERCARD;
}
// STR8 issues;
return ret;
}
int isNuts (int a, int b, int c, int d, int e, int card)
{
int nd = -1;
int ne = -1;
map <int, int> mCards;
mCards[a]++;
mCards[b]++;
mCards[c]++;
mCards[card]++;
if (a == ACE || b == ACE || c == ACE)
mCards[BABY_ACE]++;
for (int i = max (card + 4, (int)ACE); i >= 0; --i) {
int total = 0;
for (int j = 0; j < 5; ++j) {
if (mCards[i - j])
++total;
}
if (total >= 3) {
for (int j = 0; j < 5; ++j) {
if (!mCards[i-j]) {
if (ne == -1)
ne = i-j;
else
nd = i -j;
}
}
if (nd == -1)
return 1;
if (nd == d && ne == e)
return 1;
return 0;
}
}
return 0;
}
int evStr8 (int a, int b, int c, int d, int e)
{
std::map <int, int> mCard;
mCard[a]++;
mCard[b]++;
mCard[c]++;
mCard[d]++;
mCard[e]++;
int ret = 0;
if (a == ACE || b == ACE || c == ACE || d == ACE || e == ACE)
mCard[BABY_ACE]++;
std::vector <int> cards;
for (int i = BABY_ACE; i <= ACE; ++i) {
int< i + 5; ++j) {
if (!mCard[j]) {
if (!one_time) {
>= 0) {
if (!one_time) {
if (d == i + 3 && e == i + 4)
return FLOP_EQ::NUT_STR8 | FLOP_EQ::STR8;
else
return FLOP_EQ::STR8;
} else {
cards.push_back (one_time);
}
}
}
if (cards.size () == 2) {
ret |= FLOP_EQ::OESD;
} else if (cards.size () == 1) {
ret |= FLOP_EQ::GUT_SHOT;
}
int isNut = 0;
for (unsigned int i = 0; i < cards.size (); ++i) {
isNut += isNuts (a, b, c, d, e, cards[i]);
}
if (isNut == 2) {
ret |= FLOP_EQ::NUT_OESD;
ret |= FLOP_EQ::NUT_GUT_SHOT;
}
else if (isNut == 1)
ret |= FLOP_EQ::NUT_GUT_SHOT;
return ret;
}
int main ()
{
/* Card c1 (ACE, HEARTS);
Card c2 (TWO, HEARTS);
Card c3 (SEVEN, HEARTS);
Flop flop (c1, c2, c3);
printf ("%dn", flop.tones ());
*/
printf ("%dn", evStr8 (FOUR, FIVE, SIX, SEVEN, TEN) & FLOP_EQ::NUT_OESD);
return 0;
FILE *f = fopen ("flop_eq.cvs", "wb");
for (int i = TWO; i <= ACE; ++i) {
for (int j = i; j <= ACE; ++j) {
for (int k = j; k <= ACE; ++k) {
for (int a = TWO; a <= ACE; ++a) {
for (int b = a; b <= ACE; ++b) {
if (i == j && j == k && k == a && a== b)
continue;
int hash = (k << 8) + (j << 4) + i;
int hhash = Hand (Card (a, 0), Card (b, 0)).hashNoSuits ();
int eq = evalEq (i, j, k, a, b);
fprintf (f, "%d %d %d %d %dt%dn", i, j, k, a, b, eq & FLOP_EQ::NUT_GUT_SHOT);
}
}
}
}
}
fclose (f);
return 0;
}
Revise this Paste