Как решить Задачу?

Известное казино хочет поправить свое пошатнувшееся финансовое положение, установив новую модель игровых автоматов "Покер" улучшенного дизайна. Игроку в покер необходимо собрать 5 карт таким образом, чтобы среди них было максимальное количество совпадающих (лучшая комбинация – все пять карт совпадает, а худшая – все различны). К сожалению, главный программист казино недавно неожиданно разбогател, уволился и уехал на Багамы. Без него казино не может решить, как по выпавшему набору карт определить размер выигрыша клиента. Помогите казино справиться с этой задачей.
poker
если все 5 чисел равны
four of a kind
если ровно 4 числа равны между собой
full house
если три из пяти чисел равны между собой и два оставшихся числа равны
thee of a kind
если ровно три числа равны
two pairs
если есть две пары равных чисел
one pair
если только два числа равны
all different
если все числа различны

Я понимаю то, что можно все это прописать через If, но как это сделать более оптимизировано и затратить как можно меньше ресурсов компьютера?
  • Вопрос задан
  • 1066 просмотров
Решения вопроса 2
@dmitryKovalskiy
программист средней руки
Шаг 1 - отсортируйте руку
Шаг 2 - Сравниваем первую и вторую карту. Совпали - проверяем третью и т.д. выясняя самую длинную цепочку.
Не совпали - сдвигаемся на вторую карту и продолжаем тоже самое.
Ответ написан
Комментировать
@maxfox
Как вариант:
1. Сделать массив a из 13 элементов.
2. Пройти по руке, делая a[i]++ , где i - номинал карты.
3. Отсортировать массив a.
4. Если первый элемент 5 или 4, все ясно, если 3 или 2, то посмотреть на второй.
* Наверное, быстрее шаги 3 и 4 сделать просто в один проход массиву. Если 5 или 4 - выходим, если 2 или 3, ищем дальше 2 или 3.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
profesor08
@profesor08 Куратор тега JavaScript
var orig = [2, 2, 5, 6, 5]; // значения которые выпали

var sorted = orig.sort(); // отсортированные значения

// ищем кол-во одинаковых цыфр начиная с переданной позиции
function detect(i, array)
{
  var count = 1;
  for (; i < array.length - 1; i++)
  {
    if (array[i] != array[i + 1])
    {
      break;
    }
    count++;
  }
  return count;
}

var index = 0;
var count = 0;


// поиск кол-ва каждой цыфры
while(index < sorted.length - 1)
{
  index += count;
  count = detect(index, sorted);
  console.log(sorted[index] + ": " + count);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы