Техаський холдем
Техаський Холдем - це популярна покерна гра, що виникла в Техасі, США. Гра ведеться стандартною колодою з 52 карт, розділених на 4 масті (піки, черви, бубни і трефи), по 13 карт у кожній (A, K, Q, J і 10 до 2), без джокерів.
Гра відбувається наступним чином:
Спочатку кожен гравець отримує по дві карти, які кладуться обличчям вниз. Ці карти називаються закритими або кишеньковими, і їх не можна відкривати до завершення гри. Потім дилер викладає три карти обличчям вгору - це загальні карти, які можуть використовувати всі гравці. Ці три карти називаються флопом. Після флопу викладається четверта загальна карта, яка називається терном, а п'ята - рівером.
Після ріверу відбувається розкриття карт. Всі гравці відкривають свої карти. Кожен гравець обирає п'ять карт з семи можливих, тобто дві свої закриті карти і п'ять загальних, щоб сформувати найсильнішу руку. Гравець з найсильнішою рукою виграє гру. Існує десять можливих комбінацій рук, розташованих від найсильнішої до найслабшої:
Роял Стріт Флеш: A, K, Q, J і 10 однієї масті. Це особливий випадок стріт флеша.
Стріт Флеш: П'ять послідовних карт (наприклад, 7, 6, 5, 4 і 3) однієї масті.
Каре: Чотири карти одного рангу.
Фулл Хаус: Три карти одного рангу плюс пара іншого рангу.
Флеш: П'ять карт однієї масті, але не послідовних.
Стріт: П'ять послідовних карт, але не однієї масті.
Сет: Три карти одного рангу.
Дві пари: Дві карти одного рангу і дві інші карти іншого рангу.
Одна пара: Тільки пара карт (дві карти) одного рангу.
Старша карта: Будь-яка інша рука.
Карти J, Q і K в послідовності розглядаються як 11, 12 і 13 відповідно. A вважається як наступна після K і передуюча 2, тому можливі послідовності A-K-Q-J-10 і 5-4-3-2-A (але не 3-2-A-K-Q або подібні).
Якщо більше одного гравця мають однакові руки, порівнюються ранги карт.
Основна ідея - спочатку порівняти утворені множини (пари, трійки або каре), а потім решту карт від найбільшої до найменшої по рангу, поки не буде порушено рівність рук. Більш детально:
Royal straight flush: (нічия не розривається)
Straight flush: Порівнюється карта найвищого рангу.
Four of a kind: Порівнюються чотири карти, потім решта одна.
Full house: Порівнюються три карти, потім пара.
Flush: Порівнюються всі карти одна за одною.
Straight: Порівнюється карта найвищого рангу.
Three of a kind: Порівнюються три карти, потім решта дві.
Two pairs: Порівнюється пара вищого рангу, потім нижчого, потім остання карта.
One pair: Порівнюється пара, потім решта три.
High card: Порівнюються всі карти одна за одною.
Порядок рангів: A, K, Q, J, 10, 9, ..., 2 від найбільшого до найменшого, за винятком A, яке в стріті поруч з 2 розглядається як нижче за 2. Зверніть увагу, що є виняткові випадки, коли нічиї залишаються. Також зверніть увагу, що масті не враховуються при розриві нічиї.
Ось кілька прикладів порівняння (зверніть увагу, що ці приклади призначені лише для пояснення; деякі комбінації не можуть трапитися в Техаському Холдемі):
J-J-J-6-3 і K-K-Q-Q-8.
Перша рука перемагає другу, оскільки сет сильніший за дві пари.
J-J-J-6-3 і K-Q-8-8-8.
Оскільки обидві руки є сетами, спочатку розглядаються трійки, J і 8 в цьому випадку. J є вищим, отже, перша рука сильніша. Решта карт, 6-3 і K-Q, не розглядаються, оскільки нічия вже розірвана.
Q-J-8-6-3 і Q-J-8-5-3.
Обидві руки є старшими картами, припускаючи, що руки не однієї масті (тобто флеш). Три карти найвищого рангу Q-J-8 однакові, тому порівнюються четверті за рангом. Перша рука сильніша, оскільки 6 вище за 5.
9-9-Q-7-2 і 9-9-J-8-5.
Обидві руки є однією парою, з парою одного рангу (9). Тому решта карт, Q-7-2 і J-8-5, порівнюються від найвищої до найнижчої, і перша рука виграє, оскільки Q вище за J.
Тепер припустимо, що ви граєте в Техаський Холдем з одним суперником, і кишенькові карти та карти суперника вже роздані. Ви несподівано телепатичні і можете знати карти, які має суперник. Ваша здатність, однак, не настільки сильна, щоб ви могли передбачити, якими будуть терн і рівер.
Ваше завдання - написати програму, яка обчислює ймовірність вашої перемоги в грі, припускаючи, що терн і рівер вибираються рівномірно випадково з решти карт. Ви і суперник завжди повинні вибирати найсильнішу можливу руку. Нічиї повинні бути включені в розрахунок, тобто повинні рахуватися як програші.
Вхідні дані
Складається з кількох наборів даних, кожен з яких має наступний формат:
YourCard_1 YourCard_2
OpponentCard_1 OpponentCard_2
CommunityCard_1 CommunityCard_2 CommunityCard_3
Кожен набір даних складається з трьох рядків. Перший і другий рядки містять кишенькові карти ваші та суперника відповідно. Третій рядок містить флоп, тобто перші три загальні карти. Ці карти розділені пробілами.
Кожна карта представлена двома символами. Перший вказує на масть: S (піки), H (черви), D (бубни) або C (трефи). Другий вказує на ранг: A, K, Q, J, T (10) або 9 - 2. Кінець введення вказується рядком з "#". Це не повинно оброблятися.
Вихідні дані
Виведіть ймовірність у рядку. Число може містити довільну кількість цифр після десяткової точки, але не повинно містити абсолютну похибку більше ніж 10^{-6}.