public void TranslateTwoPairsHand()
 {
     var hand = new Hand("2C 2D 3H 3D 4S");
     Assert.AreEqual(HandType.TwoPairs, hand.HandType, "Two Pairs");
     Assert.AreEqual(3, hand.UsingCardValue, "Higher pair 3");
 }
        private int FindWinner(Hand player1Hand, Hand player2Hand)
        {
            if (player1Hand.HandType > player2Hand.HandType)
                return 1;
            if (player2Hand.HandType > player1Hand.HandType)
                return 2;

            if (player1Hand.UsingCardValue > player2Hand.UsingCardValue)
                return 1;
            if (player2Hand.UsingCardValue > player1Hand.UsingCardValue)
                return 2;

            // e.g. if two pairs of the same card value, then need the next highest card, then the next etc
            for (var idx = 4; idx >= 0; --idx)
            {
                if (player1Hand.CardValueList[idx] > player2Hand.CardValueList[idx])
                    return 1;
                if (player2Hand.CardValueList[idx] > player1Hand.CardValueList[idx])
                    return 2;
            }

            return 1;
        }
 public void TranslateStraightHand()
 {
     var hand = new Hand("2C 3H 4S 5D 6C");
     Assert.AreEqual(HandType.Straight, hand.HandType, "Straight");
     Assert.AreEqual(6, hand.UsingCardValue, "Highest card 6");
 }
 public void TranslateThreeOfAKindHand()
 {
     var hand = new Hand("4D 4H 4S 5H 2S");
     Assert.AreEqual(HandType.ThreeOfAKind, hand.HandType, "Three of a kind");
     Assert.AreEqual(4, hand.UsingCardValue, "Using 4");
 }
 public void TranslateRoyalFlushHand()
 {
     var hand = new Hand("TH JH QH KH AH");
     Assert.AreEqual(HandType.RoyalFlush, hand.HandType, "Royal Flush");
     Assert.AreEqual(14, hand.UsingCardValue, "Highest card");
 }
 public void TranslateStraightFlushHand()
 {
     var hand = new Hand("8D 9D TD JD QD");
     Assert.AreEqual(HandType.StraightFlush, hand.HandType, "Straight flush");
     Assert.AreEqual(12, hand.UsingCardValue, "Q aka 12 highest value");
 }
 public void TranslateHighCardHand()
 {
     var hand = new Hand("2H 4D 7C 8S 9S");
     Assert.AreEqual(HandType.HighCard, hand.HandType, "Highest card");
     Assert.AreEqual(9, hand.UsingCardValue, "Highest card is a 9");
 }
 public void TranslateOnePairHand()
 {
     var hand = new Hand("5H 5C 6S 7S KD");
     Assert.AreEqual(HandType.OnePair, hand.HandType, "Pair");
     Assert.AreEqual(5, hand.UsingCardValue, "Pair of fives");
 }
 public void TranslateFullHouseHand()
 {
     var hand = new Hand("2C 2D 7D 7H 7S");
     Assert.AreEqual(HandType.FullHouse, hand.HandType, "Full House");
     Assert.AreEqual(7, hand.UsingCardValue, "Highest card");
 }
 public void TranslateFourOfAKindHand()
 {
     var hand = new Hand("7D 7H 7S 7C 9S");
     Assert.AreEqual(HandType.FourOfAKind, hand.HandType, "Four of a kind");
     Assert.AreEqual(7, hand.UsingCardValue, "7");
 }
 public void TranslateFlushHand()
 {
     var hand = new Hand("2C 6C 7C TC QC");
     Assert.AreEqual(HandType.Flush, hand.HandType, "Flush");
     Assert.AreEqual(12, hand.UsingCardValue, "Highest card");
 }
        public void FindNumberOfTimesPlayer1Wins()
        {
            //const string path = @"C:\Development\ProjectEuler\ProjectEuler\Problems075\Problem054_poker.txt";
            const string path = "Puzzles.ProjectEuler.DataFiles.Problem_0054_poker.txt";
            var fileContent = FileHelper.GetEmbeddedResourceContent(path);
            var fileLines = fileContent.Split(new [] {'\n'}, StringSplitOptions.RemoveEmptyEntries);
            fileLines.Count().Should().Be(1000);

            var player1WinCount = 0;

            foreach (var fileLine in fileLines)
            {
                //Console.WriteLine(fileLine);
                var player1Text = fileLine.Substring(0, 14);
                var player2Text = fileLine.Substring(15);
                var player1Hand = new Hand(player1Text);
                var player2Hand = new Hand(player2Text);

                var winner = FindWinner(player1Hand, player2Hand);
                if (winner == 1)
                    player1WinCount++;
            }

            Console.WriteLine("Player 1 wins {0} hands", player1WinCount);
            player1WinCount.Should().Be(376);
        }
        public void ConfirmHandWinners(string player1HandText, string player2HandText, int expectedWinner)
        {
            var player1Hand = new Hand(player1HandText);
            var player2Hand = new Hand(player2HandText);

            var winner = FindWinner(player1Hand, player2Hand);
            Assert.AreEqual(expectedWinner, winner);
        }