コード例 #1
0
ファイル: PokerHand.cs プロジェクト: WILIBAC/HackerRank-4
 public static void compareHandRankValue(HandRankValue player1Rank, HandRankValue player2Rank)
 {
     if ((int)player1Rank.rank > (int)player2Rank.rank)
     {
         //Console.WriteLine("Player 1");
         WriteToFile("P1");
     }
     else if ((int)player1Rank.rank < (int)player2Rank.rank)
     {
         //Console.WriteLine("Player 2");
         WriteToFile("P2");
     }
     else // Rank Same
     {
         int countValues = player1Rank.values.Count();
         for (int i = 0; i < countValues; i++)
         {
             if (player1Rank.values[i] > player2Rank.values[i])
             {
                 Console.WriteLine("Player 1");
                 WriteToFile("P1");
                 break;
             }
             else if (player1Rank.values[i] < player2Rank.values[i])
             {
                 Console.WriteLine("Player 2");
                 WriteToFile("P2");
                 break;
             }
         }
     }
 }
コード例 #2
0
ファイル: PokerHand.cs プロジェクト: WILIBAC/HackerRank-4
        static public void PokerHandMain()
        {
            fillStaraightValues();
            int testCase = Convert.ToInt32(Console.ReadLine());

            for (int i = 0; i < testCase; i++)
            {
                string        playersHand = Console.ReadLine();
                HandRankValue player1Rank = calculateRank(playersHand.Substring(0, 14));
                HandRankValue player2Rank = calculateRank(playersHand.Substring(15, 14));
                compareHandRankValue(player1Rank, player2Rank);
            }
        }
コード例 #3
0
ファイル: PokerHand.cs プロジェクト: WILIBAC/HackerRank-4
        public static HandRankValue calculateRank(string playerHand)
        {
            int[]      totalValues = new int[15];
            List <int> handValue   = new List <int>();

            string[]      cards             = playerHand.Split(' ');
            bool          isSameSuit        = true;
            char          firstSuit         = cards[0][1];
            int           valueCount        = 0;
            int           highestCard       = 0;
            int           highestValueCount = 0;
            int           pairCount         = 0;
            Rank          output            = Rank.HighestCard;
            HandRankValue outputHandRankVal = new HandRankValue();

            foreach (string card in cards)
            {
                if (isSameSuit && card[1] != firstSuit)
                {
                    isSameSuit = false;
                }
                int value = 0;
                if (!int.TryParse(card[0].ToString(), out value))
                {
                    switch (card[0])
                    {
                    case 'T':
                        value = (int)Value.T;
                        break;

                    case 'J':
                        value = (int)Value.J;
                        break;

                    case 'Q':
                        value = (int)Value.Q;
                        break;

                    case 'K':
                        value = (int)Value.K;
                        break;

                    case 'A':
                        value = (int)Value.A;
                        break;
                    }
                }
                totalValues[value]++;
                if (highestValueCount < totalValues[value])
                {
                    highestValueCount = totalValues[value];
                }
                if (totalValues[value] == 2)
                {
                    pairCount++;
                }
                else if (totalValues[value] == 3)
                {
                    pairCount--;
                }
                if (highestCard < value)
                {
                    highestCard = value;
                }
                valueCount += value;
                handValue.Add(value);
            }
            if (isSameSuit)
            {
                output = Rank.Flush;
                if (checkStraight(handValue.ToArray()))
                {
                    output = Rank.StraightFlush;
                }
                if (valueCount == 60)
                {
                    output = Rank.RoyalFlush;
                }
            }
            else if (checkStraight(handValue.ToArray()))
            {
                output = Rank.Straight;
            }

            if (highestValueCount == 4)
            {
                output = Rank.FourOfAKind;
            }
            else if (highestValueCount == 3 && pairCount == 1)
            {
                output = Rank.FullHouse;
            }
            else if (highestValueCount == 3)
            {
                output = Rank.ThreeOfKind;
            }
            else if (pairCount == 2)
            {
                output = Rank.TwoPairs;
            }
            else if (pairCount == 1)
            {
                output = Rank.OnePair;
            }

            outputHandRankVal.rank   = output;
            outputHandRankVal.values = (handValue.GroupBy(qry => qry).OrderByDescending(qry => qry.Key).OrderByDescending(x => x.Count())
                                        .Select(group => new
            {
                group.Key
            }).Select(qry => qry.Key)).ToArray();                                //handValue.ToArray();
            return(outputHandRankVal);
        }