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