Задача 54
Покерные ставки

В карточной игре покер ставка состоит из пяти карт и оценивается от самой младшей до самой старшей в следующем порядке:

  • Старшая карта: Карта наибольшего достоинства.
  • Одна пара: Две карты одного достоинства.
  • Две пары: Две различные пары карт
  • Тройка: Три карты одного достоинства.
  • Стрейт: Все пять карт по порядку, любые масти.
  • Флаш: Все пять карт одной масти.
  • Фул-хаус: Три карты одного достоинства и одна пара карт.
  • Каре: Четыре карты одного достоинства.
  • Стрейт-флаш: Любые пять карт одной масти по порядку.
  • Роял-флаш: Десятка, валет, дама, король и туз одной масти.

Достоинство карт оценивается по порядку:
2, 3, 4, 5, 6, 7, 8, 9, 10, валет, дама, король, туз.

Если у двух игроков получились ставки одного порядка, то выигрывает тот, у кого карты старше: к примеру, две восьмерки выигрывают две пятерки (см. пример 1 ниже). Если же достоинства карт у игроков одинаковы, к примеру, у обоих игроков пара дам, то сравнивают карту наивысшего достоинства (см. пример 4 ниже); если же и эти карты одинаковы, сравнивают следующие две и т.д.

Допустим, два игрока сыграли 5 ставок следующим образом:

Ставка 1-й игрок 2-й игрок Победитель
1 5♥ 5♣ 6♠ 7♠ K♦
Пара пятерок
 2♣ 3♠ 8♠ 8♦ T♦
Пара восьмерок
 2-й игрок
2 5♦ 8♣ 9♠ J♠ A♣
Старшая карта туз
 2♣ 5♣ 7♦ 8♠ Q♥
Старшая карта дама
 1-й игрок
3 2♦ 9♣ A♠ A♥ A♣
Три туза
 3♦ 6♦ 7♦ T♦ Q♦
Флаш, бубны
 2-й игрок
4 4♦ 6♣ 9♥ Q♥ Q♣
Пара дам
Старшая карта девятка
 3♦ 6♦ 7♥ Q♦ Q♠
Пара дам
Старшая карта семерка
 1-й игрок
5 2♥ 2♦ 4♣ 4♦ 4♠
Фул-хаус
Три четверки
 3♣ 3♦ 3♠ 9♠ 9♦
Фул-хаус
Три тройки
 1-й игрок

Файл poker.txt содержит одну тысячу различных ставок для игры двух игроков. В каждой строке файла приведены десять карт (отделенные одним пробелом): первые пять - карты 1-го игрока, оставшиеся пять - карты 2-го игрока. Можете считать, что все ставки верны (нет неверных символов или повторов карт), ставки каждого игрока не следуют в определенном порядке, и что при каждой ставке есть безусловный победитель.

Сколько ставок выиграл 1-й игрок?

Примечание: карты в текстовом файле обозначены в соответствии с английскими наименованиями достоинств и мастей: T - десятка, J - валет, Q - дама, K - король, A - туз; S - пики, C - трефы, H - червы, D - бубны.

Оригинал
 
© Проект Эйлера | Translated problems from ProjectEuler.net