Поругайте код)
От: xobotik Россия  
Дата: 16.06.10 00:26
Оценка:
Доброй ночи=)
Поругаете код? Пожалуйста.
Наткнулся в свое компе на задачку из Ф.В.Меньшикова, решил сделать класс, вот собственно код:
using System.Collections.Generic;
using System.Linq;

namespace Menshikov_Problem1F
{
    /// <summary>
    /// Класс Poker.
    /// </summary>
    public class Poker
    {
        /// <summary>
        /// Количество карт.
        /// </summary>
        private const int cardsCount = 13;
        /// <summary>
        /// Перечисление названий комбинаций.
        /// </summary>
        private enum CombinationName
        {
            Nothing,
            Straight,
            FullHouse,
            TwoPairs,
            Impossible,
            FourOfaKind,
            ThreeOfaKind,
            Pair
        }
        /// <summary>
        /// Буфер-словарь, где мы фиксируем количество чисел (от 1 до 13) в комбинации 
        /// путем увеличения на единицу значения под индексом 
        /// равным проверяемому числу.
        /// </summary>
        private static Dictionary<int, int> buffer = new Dictionary<int,int>(cardsCount)
        {
            {1, 0},  {2, 0},  {3, 0}, {4, 0}, {5, 0}, 
            {6, 0},  {7, 0},  {8, 0}, {9, 0}, {10, 0},
            {11, 0}, {12, 0}, {13, 0}
        };
        /// <summary>
        /// Главная функция, определяющая следующие комбинации
        /// 1) Impossible;
        /// 2) Four of a Kind;
        /// 3) Three of a Kind;
        /// 4) Pair;
        /// 5) Full House;
        /// 6) Two Pairs.
        /// </summary>
        /// <param name="cards">Комбинация карт.</param>
        /// <returns>Количество цифр в cards.</returns>
        private static int[] IsItCombination(int[] cards)
        {
            ClearBufferValues();
            for (int i = 0; i < cards.Length; i++)
            {
                if (buffer.ContainsKey(cards[i]))
                {
                    buffer[cards[i]]++;          
                }
            }
            return buffer
                .Where(n => (n.Value != 0) && (n.Value != 1))
                .Select(n => n.Value)
                .ToArray();  
        }
        /// <summary>
        /// Функция проверяющая является ли текущая комбинация 
        /// карт стритом.
        /// </summary>
        /// <param name="cards">Комбинация карт.</param>
        /// <returns>Если является, то вернет true, если нет, то false.</returns>
        private static bool IsStraight(int[] cards)
        {
            return (cards.Max() - cards.Min()) == 4 ? true : false;
        }
        /// <summary>
        /// Функция возвращающая название комбинации.
        /// </summary>
        /// <param name="cards">Комбинация карт.</param>
        /// <returns>Название комбинации.</returns>
        public static string GetCombinationName(int[] cards)
        {
            if ((cards == null) ||
                (cards is int[] == false) ||
                (cards.Length == 0))
            {
                return string.Empty; 
            }

            int[] array = IsItCombination(cards);
            if (array.Length == 1)
            {
                if (array[0] == 2)
                {
                    return CombinationName.Pair.ToString();
                }
                if (array[0] == 3)
                {
                    return CombinationName.ThreeOfaKind.ToString();
                }
                if (array[0] == 4)
                {
                    return CombinationName.FourOfaKind.ToString();
                }   
                if (array[0] == 5)
                {
                    return CombinationName.Impossible.ToString();
                }                          
            }
            if (array.Length > 1)
            {
                if ((array[0] == 2) && (array[1] == 2))
                {
                    return CombinationName.TwoPairs.ToString();
                }
                if (((array[0] == 3) && (array[1] == 2)) ||
                    ((array[0] == 2) && (array[1] == 3)))
                {
                    return CombinationName.FullHouse.ToString();
                }                
            }
            if (IsStraight(cards))
            {
                return CombinationName.Straight.ToString();
            }
            return CombinationName.Nothing.ToString();
        }
        /// <summary>
        /// Очищение буфера-словаря от значений.
        /// </summary>
        private static void ClearBufferValues()
        {
            for (int i = 0; i < buffer.Count; i++)
            {
                buffer[i] = 0;
            }
        }
    }    
}

Заранее спасибо. Обещаю оценивать оценками
С уважением!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.