/// <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); } } } }
/// <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); } } } }
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); } }
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); }
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); }
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); }
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); }
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); }
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); } }
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; }
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; }
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; }
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; }
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; }