public static bool IsRoyalFlush(IEnumerable <Card> playerCards, IEnumerable <Card> tableCards)
        {
            var cards = new List <Card>(tableCards);

            cards.AddRange(playerCards);

            var comparer = new CardComparer();

            cards.Sort(comparer);

            var pair = MaxSuitCount(cards);

            if (pair.Item2 < 5)
            {
                return(false);
            }

            cards = cards.Where(x => x.Suit == pair.Item1).ToList();

            if
            (
                cards[cards.Count - 1].Rank == CardRank.Ace &&
                cards[cards.Count - 2].Rank == CardRank.King &&
                cards[cards.Count - 3].Rank == CardRank.Queen &&
                cards[cards.Count - 4].Rank == CardRank.Jack &&
                cards[cards.Count - 5].Rank == CardRank.Ten
            )
            {
                return(true);
            }


            return(false);
        }
        public static bool IsStraightFlush(IEnumerable <Card> playerCards, IEnumerable <Card> tableCards)
        {
            var cards = new List <Card>(tableCards);

            cards.AddRange(playerCards);

            var comparer = new CardComparer();

            cards.Sort(comparer);

            var      pair    = MaxSuitCount(cards);
            CardSuit maxSuit = pair.Item1;
            int      max     = pair.Item2;

            if (max < 5)
            {
                return(false);
            }

            bool haveAce = cards.Count(x => x.Rank == CardRank.Ace && x.Suit == maxSuit) == 1;
            bool haveTwo = cards.Count(x => x.Rank == CardRank.Two && x.Suit == maxSuit) == 1;

            if (haveTwo && haveAce)
            {
                if
                (
                    cards.Exists(x => x.Rank == CardRank.Three && x.Suit == maxSuit) &&
                    cards.Exists(x => x.Rank == CardRank.Four && x.Suit == maxSuit) &&
                    cards.Exists(x => x.Rank == CardRank.Five && x.Suit == maxSuit)
                )
                {
                    return(true);
                }
            }

            for (int i = 0; i < cards.Count - 5; ++i)
            {
                bool isSequence = true;
                for (int j = 0; j < 4 && isSequence; ++j)
                {
                    isSequence = comparer.Compare(cards[i + j], cards[i + j + 1]) == -1;
                }

                if (isSequence)
                {
                    return(true);
                }
            }

            return(false);
        }
        public static bool IsFlush(IEnumerable <Card> playerCards, IEnumerable <Card> tableCards)
        {
            var cards = new List <Card>(tableCards);

            cards.AddRange(playerCards);

            var comparer = new CardComparer();

            cards.Sort(comparer);

            var pair = MaxSuitCount(cards);

            if (pair.Item2 >= 5)
            {
                return(true);
            }

            return(false);
        }