Техаський холдем#4292

Техаський холдем

5 секунд
256 мегабайтів
Легка

Техаський Холдем — це популярна покерна гра, що виникла в Техасі, США. Гра ведеться стандартною колодою з карт, розділених на масті (піки, черви, бубни і трефи) по карт у кожній (, , , і до ), без джокерів.

Гра відбувається наступним чином:

Спочатку кожен гравець отримує по дві карти, які кладуться обличчям вниз. Ці карти називаються закритими або кишеньковими, і їх не можна відкривати до завершення гри. Потім дилер викладає три карти обличчям вгору — це загальні карти, які можуть використовувати всі гравці. Ці три карти називають флопом. Після флопу викладається четверта загальна карта, яка називається терном, а п’ята — рівером.

Після ріверу відбувається розкриття карт. Всі гравці відкривають свої карти. Кожен гравець обирає п’ять карт з семи можливих, тобто дві свої закриті карти і п’ять загальних, щоб сформувати найсильнішу руку. Гравець з найсильнішою рукою виграє гру. Існує десять можливих комбінацій рук, розташованих від найсильнішої до найслабшої:

Карти , , у послідовності розглядаються як , , відповідно. вважається як наступна після і передує , тому можливі послідовності  –  –  –  –  та  –  –  –  –  (але не  –  –  –  –  або подібні).

Якщо більше одного гравця мають однакові руки, порівнюються ранги карт.

Основна ідея — спочатку порівняти утворені множини (пари, трійки або каре), а потім решту карт від найбільшої до найменшої за рангом, поки не буде порушено рівність рук. Більш детально:

Порядок рангів: , , , , , , , ..., від найбільшого до найменшого, за винятком , яке у стріті поруч з вважається нижче за . Зверніть увагу, що є виняткові випадки, коли нічиї залишаються. Також масті не враховуються при розриві нічиї.

Ось кілька прикладів порівняння (зверніть увагу, що ці приклади призначені лише для пояснення; деякі комбінації не можуть трапитися в Техаському Холдемі):

Тепер припустимо, що ви граєте в Техаський Холдем з одним супротивником, і кишенькові карти та карти супротивника вже роздані. Ви несподівано телепатичні й можете знати карти, які має супротивник. Однак ваша здатність не настільки сильна, щоб ви могли передбачити, якими будуть терн і рівер.

Ваше завдання — написати програму, яка обчислює ймовірність вашої перемоги в грі, припускаючи, що терн і рівер вибираються рівномірно випадково з решти карт. Ви і супротивник завжди повинні вибирати найсильнішу можливу руку. Нічиї повинні бути включені в розрахунок — тобто вважаються програшем.

Вхідні дані

Складається з кількох наборів даних, кожен з яких має наступний формат:

\text{YourCard}_1\ \text{YourCard}_2

\text{OpponentCard}_1\ \text{OpponentCard}_2

\text{CommunityCard}_1\ \text{CommunityCard}_2\ \text{CommunityCard}_3

Кожен набір даних складається з трьох рядків. Перший і другий рядки містять кишенькові карти ваші та супротивника відповідно. Третій рядок — це флоп (перші три загальні карти). Ці карти розділені пробілами.

Кожна карта представлена двома символами. Перший вказує на масть: (піки), (черви), (бубни) або (трефи). Другий вказує на ранг: , , , , (), , ..., . Кінець введення вказується рядком з "#". Це не повинно оброблятись.

Вихідні дані

Виведіть імовірність у рядку. Число може містити довільну кількість цифр після десяткової точки, але не повинно містити абсолютну похибку більше ніж 10^{-6}.

Приклади

Приклад 1

Loading
Loading