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.");
                }

            }
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
0
        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));
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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));
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
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);
        }
Ejemplo n.º 10
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);
        }
Ejemplo n.º 11
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));
        }
Ejemplo n.º 12
0
        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));
        }
Ejemplo n.º 13
0
        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;
 }