Доброй ночи=)
Поругаете код? Пожалуйста.
Наткнулся в свое компе на задачку из Ф.В.Меньшикова, решил сделать класс, вот собственно код:
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;
}
}
}
}
Заранее спасибо. Обещаю оценивать оценками