public static HandPlayResult TestHandChances(PokerHand hand, OrderedCardSet handCards, ICardDealer dealer) { OrderedCardSet oponentSet = HoldemHand.GetOtherCards(dealer.FullDeck, handCards, dealer.CommunityCards); int wins = 0, ties = 0, losses = 0; List <OrderedCardSet> allHands = GetOpponentCombinationOfHandCards(oponentSet); foreach (OrderedCardSet iHand in allHands) { PokerHand otherHand = HoldemHand.ChooseBestHand(iHand, dealer.CommunityCards); int compare = hand.CompareTo(otherHand); if (compare > 0) { wins += 1; } else if (compare < 0) { losses += 1; } else { ties += 1; } } return(new HandPlayResult(allHands.Count, wins, ties, losses)); }
static void Main(string[] args) { bool debug = (args.Length > 0); int maxPokerHandSize = 5; // Two Hands PokerHand black = new PokerHand(maxPokerHandSize); PokerHand white = new PokerHand(maxPokerHandSize); string input; while ((input = Console.ReadLine()) != null) { // Debug - Some Test Cases and Expected Results //input = "2H 3D 5S 9C KD 2C 3H 4S AD AH"; // High Card, Pair //input = "2H 3D 4H 5D 6H 3C 4C 5C 6C 7C"; // Straight, Straight Flush //input = "2H 2D 3H 3D 4C AH AD TC TD TH"; // Two Pair, Full House (Correctly does 10) //input = "2H 2D 2C 4H 5H AH AD AC AS KD"; // 3Kind, 4Kind //input = "2H 4H 6H 8H TH 2D 4D 6D 8D TD"; // Flush (Tie)s //input = "2H 4D 6H 8D AH 3H 4C 6D 7C AD"; // Both Ace High, Black has Better Kickers //input = "2H 2D 4H 4D AH 2S 2C 4S 4C AC"; // Two Pair Real Tie if (debug) { Console.WriteLine(input); } // Clear the Hands black.Clear(); white.Clear(); // Parse and load Hands try { string[] cardStrings = input.Split(' '); for (int i = 0; i < black.MaxHandSize; ++i) { black.Add(new PlayingCard(cardStrings[i])); } for (int i = 0; i < white.MaxHandSize; ++i) { white.Add(new PlayingCard(cardStrings[i + black.MaxHandSize])); } } catch (Exception e) { Console.WriteLine("Bad Card in the Mix"); if (debug) { Console.WriteLine(e.StackTrace); Console.WriteLine(e.Message); } continue; } // Debug - Output the Scores if (debug) { Console.WriteLine("black score: " + black.ScoreHand().ToString()); Console.WriteLine("white score: " + white.ScoreHand().ToString()); } // Compare Hands - Output the Winner int compare = black.CompareTo(white); if (compare == 0) { Console.WriteLine("Tie."); } else if (compare < 0) { Console.WriteLine("White wins."); } else { Console.WriteLine("Black wins."); } } }
public void StraightFlush_6_Is_Better_Than_StraightFlush_5() { const long straightFlushHand1 = 0x000000000000700F; // 0000 0000 0000/0000 0000.0000 0/000.0000 0000.00/00 0000.0000 011/1.0000 0000.1111 const long straightFlushHand2 = 0x000000000000301F; // 00000000 0000//0000 0000.0000 0/000.0000 0000.00/00 0000.0000 001/1.0000 0001.1111 var pht1 = new StraightFlush(); var ph1 = new PokerHand(straightFlushHand1); pht1.Parse(ph1); var ph2 = new PokerHand(straightFlushHand2); pht1.Parse(ph2); Assert.Equal(1, ph1.CompareTo(ph2)); Assert.Equal(-1, ph2.CompareTo(ph1)); ph2 = new PokerHand(straightFlushHand1); pht1.Parse(ph2); Assert.Equal(0, ph1.CompareTo(ph2)); }
public void StraightFlush_Is_Better_Than_FourOfAKind() { const long straightFlushHand = 0x000000000040201F; // 00000000 0000//0000 0000.0000 0/000.0000 0000.00/00 0100.0000 001/0.0000 0001.1111 const long fourOfAKindHand = 0x0008004002001000; // 0000 0000 0000/1000 0000.0000 0/100.0000 0000.00/10 0000.0000 000/1.0000 0000.0000 var pht1 = new StraightFlush(); var pht2 = new FourOfAKind(); var ph1 = new PokerHand(straightFlushHand); pht1.Parse(ph1); var ph2 = new PokerHand(fourOfAKindHand); pht2.Parse(ph2); Assert.Equal(-1, ph1.CompareTo(ph2)); Assert.Equal(1, ph2.CompareTo(ph1)); ph2 = new PokerHand(straightFlushHand); pht1.Parse(ph2); Assert.Equal(0, ph1.CompareTo(ph2)); }
public override long Solution() { long playerOneWins = 0; string[] matches = Input.Problem054.Split(new char[] { '\n' }); foreach (string match in matches) { PokerHand playerOne = new PokerHand(match.Substring(0, 14)); PokerHand playerTwo = new PokerHand(match.Substring(15)); if (playerOne.CompareTo(playerTwo) > 0) { playerOneWins++; } } return(playerOneWins); }
static void Main(string[] args) { PokerHand h1 = PokerHandClassifier.ClassifyHand(new List <Card> { new Card(Card.CardKind.Queen, Card.CardSuit.Clubs), new Card(Card.CardKind.Jack, Card.CardSuit.Clubs), new Card(Card.CardKind.Ten, Card.CardSuit.Hearts), new Card(Card.CardKind.Two, Card.CardSuit.Diamonds), new Card(Card.CardKind.Five, Card.CardSuit.Spades) }); PokerHand h2 = PokerHandClassifier.ClassifyHand(new List <Card> { new Card(Card.CardKind.Queen, Card.CardSuit.Diamonds), new Card(Card.CardKind.Jack, Card.CardSuit.Diamonds), new Card(Card.CardKind.Three, Card.CardSuit.Hearts), new Card(Card.CardKind.Two, Card.CardSuit.Diamonds), new Card(Card.CardKind.Five, Card.CardSuit.Spades) }); Console.WriteLine(h1.CompareTo(h2)); }
private static TopHandPlayer DetectWinner(PokerHand aliceTopHand, PokerHand bobTopHand) { var comparisonResult = aliceTopHand.CompareTo(bobTopHand); TopHandPlayer winner; if (comparisonResult < 0) { winner = TopHandPlayer.Bob; } else if (comparisonResult > 0) { winner = TopHandPlayer.Alice; } else { winner = TopHandPlayer.Both; } return(winner); }
public void TestStraightFlushGreaterAndLess() { PokerHand mine = new PokerHand(); mine.Cards.Add(new Card { suit = Suit.Spades, face = Face.Ace }); mine.Cards.Add(new Card { suit = Suit.Spades, face = Face.Queen }); mine.Cards.Add(new Card { suit = Suit.Spades, face = Face.King }); mine.Cards.Add(new Card { suit = Suit.Spades, face = Face.Ten }); mine.Cards.Add(new Card { suit = Suit.Spades, face = Face.Jack }); PokerHand theirs = new PokerHand(); theirs.Cards.Clear(); theirs.Cards.Add(new Card { suit = Suit.Hearts, face = Face.Nine }); theirs.Cards.Add(new Card { suit = Suit.Hearts, face = Face.Ten }); theirs.Cards.Add(new Card { suit = Suit.Hearts, face = Face.Queen }); theirs.Cards.Add(new Card { suit = Suit.Hearts, face = Face.King }); theirs.Cards.Add(new Card { suit = Suit.Hearts, face = Face.Jack }); Assert.IsTrue(mine.CompareTo(theirs) > 0); Assert.IsTrue(theirs.CompareTo(mine) < 0); }
public void TestCompareToHighCard() { PokerHand mine = new PokerHand(); mine.Cards.Add(new Card { suit = Suit.Hearts, face = Face.Ace }); mine.Cards.Add(new Card { suit = Suit.Spades, face = Face.King }); mine.Cards.Add(new Card { suit = Suit.Hearts, face = Face.Queen }); mine.Cards.Add(new Card { suit = Suit.Hearts, face = Face.Jack }); mine.Cards.Add(new Card { suit = Suit.Hearts, face = Face.Nine }); PokerHand theirs = new PokerHand(); theirs.Cards.Clear(); theirs.Cards.Add(new Card { suit = Suit.Diamonds, face = Face.Ace }); theirs.Cards.Add(new Card { suit = Suit.Clubs, face = Face.King }); theirs.Cards.Add(new Card { suit = Suit.Diamonds, face = Face.Queen }); theirs.Cards.Add(new Card { suit = Suit.Diamonds, face = Face.Jack }); theirs.Cards.Add(new Card { suit = Suit.Diamonds, face = Face.Eight }); Assert.IsTrue(mine.CompareTo(theirs) > 0); }
public void TestHighCardGreaterAndLess() { PokerHand mine = new PokerHand(); mine.Cards.Add(new Card { suit = Suit.Spades, face = Face.Ace }); mine.Cards.Add(new Card { suit = Suit.Hearts, face = Face.Ace }); mine.Cards.Add(new Card { suit = Suit.Clubs, face = Face.Five }); mine.Cards.Add(new Card { suit = Suit.Diamonds, face = Face.Three }); mine.Cards.Add(new Card { suit = Suit.Spades, face = Face.Two }); PokerHand theirs = new PokerHand(); theirs.Cards.Clear(); theirs.Cards.Add(new Card { suit = Suit.Spades, face = Face.King }); theirs.Cards.Add(new Card { suit = Suit.Hearts, face = Face.King }); theirs.Cards.Add(new Card { suit = Suit.Clubs, face = Face.Five }); theirs.Cards.Add(new Card { suit = Suit.Diamonds, face = Face.Three }); theirs.Cards.Add(new Card { suit = Suit.Hearts, face = Face.Two }); Assert.IsTrue(mine.CompareTo(theirs) > 0); Assert.IsTrue(theirs.CompareTo(mine) < 0); }
public void TestStraightFlushAreEqual() { PokerHand mine = new PokerHand(); mine.Cards.Add(new Card { suit = Suit.Spades, face = Face.Ace }); mine.Cards.Add(new Card { suit = Suit.Spades, face = Face.Queen }); mine.Cards.Add(new Card { suit = Suit.Spades, face = Face.King }); mine.Cards.Add(new Card { suit = Suit.Spades, face = Face.Ten }); mine.Cards.Add(new Card { suit = Suit.Spades, face = Face.Jack }); PokerHand theirs = new PokerHand(); theirs.Cards.Clear(); theirs.Cards.Add(new Card { suit = Suit.Hearts, face = Face.Ace }); theirs.Cards.Add(new Card { suit = Suit.Hearts, face = Face.Ten }); theirs.Cards.Add(new Card { suit = Suit.Hearts, face = Face.Queen }); theirs.Cards.Add(new Card { suit = Suit.Hearts, face = Face.King }); theirs.Cards.Add(new Card { suit = Suit.Hearts, face = Face.Jack }); Assert.AreEqual(0, mine.CompareTo(theirs)); }
public void TestTwoPairAreEqual() { PokerHand mine = new PokerHand(); mine.Cards.Add(new Card { suit = Suit.Spades, face = Face.Ace }); mine.Cards.Add(new Card { suit = Suit.Hearts, face = Face.Ace }); mine.Cards.Add(new Card { suit = Suit.Spades, face = Face.Three }); mine.Cards.Add(new Card { suit = Suit.Hearts, face = Face.Three }); mine.Cards.Add(new Card { suit = Suit.Spades, face = Face.Two }); PokerHand theirs = new PokerHand(); theirs.Cards.Clear(); theirs.Cards.Add(new Card { suit = Suit.Clubs, face = Face.Ace }); theirs.Cards.Add(new Card { suit = Suit.Diamonds, face = Face.Ace }); theirs.Cards.Add(new Card { suit = Suit.Clubs, face = Face.Three }); theirs.Cards.Add(new Card { suit = Suit.Diamonds, face = Face.Three }); theirs.Cards.Add(new Card { suit = Suit.Hearts, face = Face.Two }); Assert.AreEqual(0, mine.CompareTo(theirs)); }
public void TestStraightFlush() { var hand = new PokerHand(); hand.Add(new Card(CardSuit.Clubs, CardFace.Jack)); hand.Add(new Card(CardSuit.Clubs, CardFace.Ten)); hand.Add(new Card(CardSuit.Clubs, CardFace.Nine)); hand.Add(new Card(CardSuit.Clubs, CardFace.Eight)); hand.Add(new Card(CardSuit.Clubs, CardFace.Seven)); Assert.AreEqual(hand.Rank, PokerHandRank.StraightFlush); var hand2 = new PokerHand(); hand2.Add(new Card(CardSuit.Clubs, CardFace.Queen)); hand2.Add(new Card(CardSuit.Clubs, CardFace.Jack)); hand2.Add(new Card(CardSuit.Clubs, CardFace.Ten)); hand2.Add(new Card(CardSuit.Clubs, CardFace.Nine)); hand2.Add(new Card(CardSuit.Clubs, CardFace.Eight)); Assert.AreEqual(hand.CompareTo(hand2), -1); }
public static PokerHand ChooseBestHand(OrderedCardSet handCards, OrderedCardSet playingCards) { PokerHand best = null; List <OrderedCardSet> createHands = GetCombinationOfPokerHands(handCards, playingCards); foreach (OrderedCardSet hand in createHands) { PokerHand pHand = IdentitfyHand(hand); if (best == null) { best = pHand; } else if (pHand.CompareTo(best) > 0) { best = pHand; } } return(best); }
/// <summary>Compares Two Hands and Returns the better</summary> /// <param name="hand1">First Hand</param> /// <param name="hand2">Second Hand</param> /// <returns>The Hand with the Greater Score</returns> protected virtual PokerHand GetBestHand( PokerHand hand1, PokerHand hand2 ) { if (hand1 == null) { return hand2; } if (hand2 == null) { return hand1; } return (hand2.CompareTo(hand1) == 1) ? hand2 : hand1; }