Exemple #1
0
 /// <summary>
 ///     Generate random hands, and write out the details of those under-ranked
 ///     by the rank predicate methods.  This would happen if one or more of the
 ///     rank predicate methods returned false negatives.
 /// </summary>
 public static void WriteErrantRandomHands(
     int numSamplesPerSimpleRank = 100,
     int numCardsDealt = 5,
     int numCardsInFinalHand = 5)
 {
     Ranker ranker = new Ranker(numCardsInFinalHand, false);
     TestHandGenerator handGen = new TestHandGenerator(0);
     foreach (SimpleRank sRank in Ranker.StandardRanks)
     {
         // Console.WriteLine();
         Console.Write("Press enter to see errant hands of type {0:s}", sRank.ToString());
         Console.Out.Flush();
         Console.ReadLine();
         for (int i = 0; i < 1000; i++)
         {
             Hand h = handGen.Generators[sRank](numCardsDealt, numCardsInFinalHand);
             FullRank fRank;
             HandCard[] hcsRank;
             HandCard[] hcsFill;
             ranker.GetFullRank(h, null, out fRank, out hcsRank, out hcsFill);
             if (fRank.SRank != sRank)
             {
                 Console.WriteLine("Attempt to create {0:s} yielded {1:s}",
                     sRank.ToString(), fRank.SRank.ToString());
                 Console.Write("  ");
                 Hand.WriteHandData(h, null, fRank, hcsRank, hcsFill);
             }
         }
     }
 }
Exemple #2
0
        /// <summary>
        ///     Generate random hands, and write out the details of those under-ranked
        ///     by the rank predicate methods.  This would happen if one or more of the
        ///     rank predicate methods returned false negatives.
        /// </summary>
        public static void WriteErrantRandomHands(
            int numSamplesPerSimpleRank = 100,
            int numCardsDealt           = 5,
            int numCardsInFinalHand     = 5)
        {
            Ranker            ranker  = new Ranker(numCardsInFinalHand, false);
            TestHandGenerator handGen = new TestHandGenerator(0);

            foreach (SimpleRank sRank in Ranker.StandardRanks)
            {
                // Console.WriteLine();
                Console.Write("Press enter to see errant hands of type {0:s}", sRank.ToString());
                Console.Out.Flush();
                Console.ReadLine();
                for (int i = 0; i < 1000; i++)
                {
                    Hand       h = handGen.Generators[sRank](numCardsDealt, numCardsInFinalHand);
                    FullRank   fRank;
                    HandCard[] hcsRank;
                    HandCard[] hcsFill;
                    ranker.GetFullRank(h, null, out fRank, out hcsRank, out hcsFill);
                    if (fRank.SRank != sRank)
                    {
                        Console.WriteLine("Attempt to create {0:s} yielded {1:s}",
                                          sRank.ToString(), fRank.SRank.ToString());
                        Console.Write("  ");
                        Hand.WriteHandData(h, null, fRank, hcsRank, hcsFill);
                    }
                }
            }
        }
Exemple #3
0
 public static void WriteTestHandRanks(Ranker ranker, IEnumerable <Card> wilds)
 {
     Console.WriteLine();
     Console.WriteLine("Press enter to write out evaluation of each test hand for each rank.");
     Console.ReadLine();
     foreach (Hand h in TestHands.Hands)
     {
         FullRank   fRank;
         HandCard[] hcsRank;
         HandCard[] hcsFill;
         ranker.GetFullRank(h, wilds, out fRank, out hcsRank, out hcsFill);
         Hand.WriteHandData(h, wilds, fRank, hcsRank, hcsFill);
     }
 }
Exemple #4
0
        public Hand GetRandomHighCard(int numCardsDealt, int numCardsInFinalHand)
        {
            Hand     hand;
            FullRank fRank;

            HandCard[] hcsRank;
            HandCard[] hcsFill;
            Ranker     ranker = new Ranker(numCardsInFinalHand, false);

            do
            {
                hand    = new Hand(GetRandomCards(numCardsDealt));
                hcsRank = null;
                hcsFill = null;
                ranker.GetFullRank(hand, null, out fRank, out hcsRank, out hcsFill);
            } while (fRank.SRank > SimpleRank.HighCard);
            return(hand);
        }
Exemple #5
0
        public Hand GetRandomFlush5(int numCardsDealt, int numCardsInFinalHand)
        {
            Ranker   ranker    = new Ranker(numCardsInFinalHand, false);
            TSuit    flushSuit = GetRandomSuit();
            Hand     hand;
            FullRank fRank;

            HandCard[] hcsRank;
            HandCard[] hcsFill;
            do
            {
                Card[] chosen = GetRandomCardsWithSuit(flushSuit, 5);
                Card[] fill   = GetRandomCards(numCardsDealt - 5).ToArray();
                fRank   = null;
                hcsRank = null;
                hcsFill = null;
                hand    = new Hand(fill.Concat(chosen));
                ranker.GetFullRank(hand, null, out fRank, out hcsRank, out hcsFill);
            } while (fRank.SRank > SimpleRank.Flush5);
            return(hand);
        }
Exemple #6
0
        public Hand GetRandomTwoPair(int numCardsDealt, int numCardsInFinalHand)
        {
            Ranker   ranker = new Ranker(numCardsInFinalHand, false);
            Hand     hand;
            FullRank fRank;

            HandCard[] hcsRank;
            HandCard[] hcsFill;
            do
            {
                TValue pair1Value = (TValue)random.Next(2, 14);
                TValue pair2Value = (TValue)random.Next(2, 13);
                if (pair2Value >= pair1Value)
                {
                    pair2Value = pair2Value.Next();
                }
                Card[] pair1Cards = GetRandomCardsWithValue(pair1Value, 2);
                Card[] pair2Cards = GetRandomCardsWithValue(pair2Value, 2);
                Card[] fill       = GetRandomCards(numCardsDealt - 4).ToArray();
                hand = new Hand(fill.Concat(pair1Cards).Concat(pair2Cards));
                ranker.GetFullRank(hand, null, out fRank, out hcsRank, out hcsFill);
            } while (fRank.SRank > SimpleRank.TwoPair);
            return(hand);
        }
Exemple #7
0
        public Hand GetRandomStraightOrStraightFlush5(int numCardsDealt, int numCardsInFinalHand, bool doRequireFlush)
        {
            Ranker   ranker = new Ranker(numCardsInFinalHand, false);
            Hand     hand;
            FullRank fRank;
            TSuit    flushSuit = GetRandomSuit();

            HandCard[] hcsRank;
            HandCard[] hcsFill;
            do
            {
                TValue maxValue = (TValue)random.Next((int)TValue.Six, (int)TValue.Ace);
                TValue minValue = maxValue.Prev(4);
                Card[] chosen   = Enumerable.Range((int)minValue, ((int)maxValue - (int)minValue) + 1)
                                  .Select(k => doRequireFlush
                            ? (new Card((TValue)k, flushSuit))
                            : GetRandomCardWithValue((TValue)k))
                                  .Reverse().ToArray();
                Card[] fill = GetRandomCards(numCardsDealt - 5).ToArray();
                hand = new Hand(fill.Concat(chosen));
                ranker.GetFullRank(hand, null, out fRank, out hcsRank, out hcsFill);
            } while (fRank.SRank > (doRequireFlush ? SimpleRank.StraightFlush5 : SimpleRank.Straight5));
            return(hand);
        }
Exemple #8
0
        public Hand GetRandomKindN(int numCardsDealt, int numCardsInFinalHand, int n)
        {
            Contract.Requires(n >= 2 && n <= 5, "Error: size of n-of-a-kind out of range");
            Ranker   ranker = new Ranker(numCardsInFinalHand, false);
            Hand     hand;
            FullRank fRank;

            HandCard[]   hcsRank;
            HandCard[]   hcsFill;
            SimpleRank[] availRanks = new SimpleRank[] {
                SimpleRank.Kind2, SimpleRank.Kind3, SimpleRank.Kind4, SimpleRank.Kind5
            };
            SimpleRank thisRank = availRanks[n - 2];

            do
            {
                TValue value = (TValue)random.Next(2, 14);
                Card[] tuple = GetRandomCardsWithValue(value, n);
                Card[] fill  = GetRandomCards(numCardsDealt - n);
                hand = new Hand(tuple.Concat(fill));
                ranker.GetFullRank(hand, null, out fRank, out hcsRank, out hcsFill);
            } while (fRank.SRank > thisRank);
            return(hand);
        }
Exemple #9
0
 public static void WriteTestHandRanks(Ranker ranker, IEnumerable<Card> wilds)
 {
     Console.WriteLine();
     Console.WriteLine("Press enter to write out evaluation of each test hand for each rank.");
     Console.ReadLine();
     foreach (Hand h in TestHands.Hands)
     {
         FullRank fRank;
         HandCard[] hcsRank;
         HandCard[] hcsFill;
         ranker.GetFullRank(h, wilds, out fRank, out hcsRank, out hcsFill);
         Hand.WriteHandData(h, wilds, fRank, hcsRank, hcsFill);
     }
 }
Exemple #10
0
 public Hand GetRandomTwoPair(int numCardsDealt, int numCardsInFinalHand)
 {
     Ranker ranker = new Ranker(numCardsInFinalHand, false);
     Hand hand;
     FullRank fRank;
     HandCard[] hcsRank;
     HandCard[] hcsFill;
     do
     {
         TValue pair1Value = (TValue)random.Next(2, 14);
         TValue pair2Value = (TValue)random.Next(2, 13);
         if (pair2Value >= pair1Value) { pair2Value = pair2Value.Next(); }
         Card[] pair1Cards = GetRandomCardsWithValue(pair1Value, 2);
         Card[] pair2Cards = GetRandomCardsWithValue(pair2Value, 2);
         Card[] fill = GetRandomCards(numCardsDealt - 4).ToArray();
         hand = new Hand(fill.Concat(pair1Cards).Concat(pair2Cards));
         ranker.GetFullRank(hand, null, out fRank, out hcsRank, out hcsFill);
     } while (fRank.SRank > SimpleRank.TwoPair);
     return hand;
 }
Exemple #11
0
 public Hand GetRandomStraightOrStraightFlush5(int numCardsDealt, int numCardsInFinalHand, bool doRequireFlush)
 {
     Ranker ranker = new Ranker(numCardsInFinalHand, false);
     Hand hand;
     FullRank fRank;
     TSuit flushSuit = GetRandomSuit();
     HandCard[] hcsRank;
     HandCard[] hcsFill;
     do
     {
         TValue maxValue = (TValue)random.Next((int)TValue.Six, (int)TValue.Ace);
         TValue minValue = maxValue.Prev(4);
         Card[] chosen = Enumerable.Range((int)minValue, ((int)maxValue - (int)minValue) + 1)
             .Select(k => doRequireFlush
                     ? (new Card((TValue)k, flushSuit))
                     : GetRandomCardWithValue((TValue)k))
             .Reverse().ToArray();
         Card[] fill = GetRandomCards(numCardsDealt - 5).ToArray();
         hand = new Hand(fill.Concat(chosen));
         ranker.GetFullRank(hand, null, out fRank, out hcsRank, out hcsFill);
     } while (fRank.SRank > (doRequireFlush ? SimpleRank.StraightFlush5 : SimpleRank.Straight5));
     return hand;
 }
Exemple #12
0
        public Hand GetRandomKindN(int numCardsDealt, int numCardsInFinalHand, int n)
        {
            Contract.Requires(n >= 2 && n <= 5, "Error: size of n-of-a-kind out of range");
            Ranker ranker = new Ranker(numCardsInFinalHand, false);
            Hand hand;
            FullRank fRank;
            HandCard[] hcsRank;
            HandCard[] hcsFill;
            SimpleRank[] availRanks = new SimpleRank[] {
                SimpleRank.Kind2, SimpleRank.Kind3, SimpleRank.Kind4, SimpleRank.Kind5
            };
            SimpleRank thisRank = availRanks[n - 2];

            do
            {
                TValue value = (TValue)random.Next(2, 14);
                Card[] tuple = GetRandomCardsWithValue(value, n);
                Card[] fill = GetRandomCards(numCardsDealt - n);
                hand = new Hand(tuple.Concat(fill));
                ranker.GetFullRank(hand, null, out fRank, out hcsRank, out hcsFill);
            } while (fRank.SRank > thisRank);
            return hand;
        }
Exemple #13
0
 public Hand GetRandomHighCard(int numCardsDealt, int numCardsInFinalHand)
 {
     Hand hand;
     FullRank fRank;
     HandCard[] hcsRank;
     HandCard[] hcsFill;
     Ranker ranker = new Ranker(numCardsInFinalHand, false);
     do
     {
         hand = new Hand(GetRandomCards(numCardsDealt));
         hcsRank = null;
         hcsFill = null;
         ranker.GetFullRank(hand, null, out fRank, out hcsRank, out hcsFill);
     } while (fRank.SRank > SimpleRank.HighCard);
     return hand;
 }
Exemple #14
0
 public Hand GetRandomFlush5(int numCardsDealt, int numCardsInFinalHand)
 {
     Ranker ranker = new Ranker(numCardsInFinalHand, false);
     TSuit flushSuit = GetRandomSuit();
     Hand hand;
     FullRank fRank;
     HandCard[] hcsRank;
     HandCard[] hcsFill;
     do
     {
         Card[] chosen = GetRandomCardsWithSuit(flushSuit, 5);
         Card[] fill = GetRandomCards(numCardsDealt - 5).ToArray();
         fRank = null;
         hcsRank = null;
         hcsFill = null;
         hand = new Hand(fill.Concat(chosen));
         ranker.GetFullRank(hand, null, out fRank, out hcsRank, out hcsFill);
     } while (fRank.SRank > SimpleRank.Flush5);
     return hand;
 }