Техаський Холдем — це популярна покерна гра, що виникла в Техасі, США. Гра ведеться стандартною колодою з карт, розділених на масті (піки, черви, бубни і трефи) по карт у кожній (, , , і до ), без джокерів.
Гра відбувається наступним чином:
Спочатку кожен гравець отримує по дві карти, які кладуться обличчям вниз. Ці карти називаються закритими або кишеньковими, і їх не можна відкривати до завершення гри. Потім дилер викладає три карти обличчям вгору — це загальні карти, які можуть використовувати всі гравці. Ці три карти називають флопом. Після флопу викладається четверта загальна карта, яка називається терном, а п’ята — рівером.
Після ріверу відбувається розкриття карт. Всі гравці відкривають свої карти. Кожен гравець обирає п’ять карт з семи можливих, тобто дві свої закриті карти і п’ять загальних, щоб сформувати найсильнішу руку. Гравець з найсильнішою рукою виграє гру. Існує десять можливих комбінацій рук, розташованих від найсильнішої до найслабшої:
Роял Стріт Флеш: , , , , однієї масті. Це особливий випадок стріт флеша.
Стріт Флеш: П’ять послідовних карт (наприклад, , , , , ) однієї масті.
Каре: Чотири карти одного рангу.
Фулл Хаус: Три карти одного рангу плюс пара іншого рангу.
Флеш: П’ять карт однієї масті, але не послідовні.
Стріт: П’ять послідовних карт, але не однієї масті.
Сет: Три карти одного рангу.
Дві пари: Дві карти одного рангу і дві інших карти іншого рангу.
Одна пара: Дві карти одного рангу.
Старша карта: Будь-яка інша рука.
Карти , , у послідовності розглядаються як , , відповідно. вважається як наступна після і передує , тому можливі послідовності – – – – та – – – – (але не – – – – або подібні).
Якщо більше одного гравця мають однакові руки, порівнюються ранги карт.
Основна ідея — спочатку порівняти утворені множини (пари, трійки або каре), а потім решту карт від найбільшої до найменшої за рангом, поки не буде порушено рівність рук. Більш детально:
Роял стріт флеш: (нічиї не розриваються)
Стріт флеш: Порівнюється карта найвищого рангу.
Каре: Порівнюються чотири карти, потім решта одна.
Фулл хаус: Порівнюються три карти, потім пара.
Флеш: Порівнюються всі карти одна за одною.
Стріт: Порівнюється карта найвищого рангу.
Сет: Порівнюються три карти, потім решта дві.
Дві пари: Порівнюється пара вищого рангу, потім нижчого, потім остання карта.
Одна пара: Порівнюється пара, потім решта три карти.
Старша карта: Порівнюються всі карти одна за одною.
Порядок рангів: , , , , , , , ..., від найбільшого до найменшого, за винятком , яке у стріті поруч з вважається нижче за . Зверніть увагу, що є виняткові випадки, коли нічиї залишаються. Також масті не враховуються при розриві нічиї.
Ось кілька прикладів порівняння (зверніть увагу, що ці приклади призначені лише для пояснення; деякі комбінації не можуть трапитися в Техаському Холдемі):
– – – – і – – – – . Перша рука перемагає другу, оскільки сет сильніший за дві пари.
– – – – і – – – – . Оскільки обидві руки — сети, спочатку розглядаються трійки: і у цьому випадку. є вищим, отже, перша рука сильніша. Решта карт не розглядаються, оскільки нічия вже розірвана.
– – – – і – – – – . Обидві руки є старшими картами, припускаючи, що руки не однієї масті (тобто не флеш). Три карти найвищого рангу – – однакові, отже, порівнюються четверті за рангом. Перша рука сильніша, оскільки вище за .
– – – – і – – – – . Обидві руки — одна пара з парою одного рангу (). Решта карт – – і – – порівнюються від найвищої до найнижчої, і перша рука виграє, оскільки вище за .
Тепер припустимо, що ви граєте в Техаський Холдем з одним супротивником, і кишенькові карти та карти супротивника вже роздані. Ви несподівано телепатичні й можете знати карти, які має супротивник. Однак ваша здатність не настільки сильна, щоб ви могли передбачити, якими будуть терн і рівер.
Ваше завдання — написати програму, яка обчислює ймовірність вашої перемоги в грі, припускаючи, що терн і рівер вибираються рівномірно випадково з решти карт. Ви і супротивник завжди повинні вибирати найсильнішу можливу руку. Нічиї повинні бути включені в розрахунок — тобто вважаються програшем.
Складається з кількох наборів даних, кожен з яких має наступний формат:
\text{YourCard}_1\ \text{YourCard}_2
\text{OpponentCard}_1\ \text{OpponentCard}_2
\text{CommunityCard}_1\ \text{CommunityCard}_2\ \text{CommunityCard}_3
Кожен набір даних складається з трьох рядків. Перший і другий рядки містять кишенькові карти ваші та супротивника відповідно. Третій рядок — це флоп (перші три загальні карти). Ці карти розділені пробілами.
Кожна карта представлена двома символами. Перший вказує на масть: (піки), (черви), (бубни) або (трефи). Другий вказує на ранг: , , , , (), , ..., . Кінець введення вказується рядком з "#". Це не повинно оброблятись.
Виведіть імовірність у рядку. Число може містити довільну кількість цифр після десяткової точки, але не повинно містити абсолютну похибку більше ніж 10^{-6}.
Приклад 1