Welcome, guest! Login / Register - Why register?
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 &#40;"flop_eq.cvs", "wb"&#41;;
 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

Your Name: Code Language: