Есть колода карт. Есть несколько игроков. У каждого есть 7 карт из которых надо выбрать лучшую комбинацию , состоящую из 5 карт.
выигрывает лучшая комбинация из всех.
Вопрос 1: как из 7 карт выбрать лучшую возможную?
Вопрос 2: Как сравнить эти 2 комбинации?
Немного рабочей инфы (для тех, кто не знаком с покером):
Масти карт:
d - diamonds (бубна)
h - hearts (черва)
s - spades (пик)
с - clubs (трефа)
Карты:
A - туз
K - король
Q - дама
J - валет
T - 10
9 … 2 - все остальные
Всего групп комбинаций - 10 (с примерами):
Самая сильная - Флеш-рояль: A K Q J T одной масти
Стрит флеш: (A 2 3 4 5 ) или (K Q J T 9) одной масти
каре: (2 2 2 2 <любая карта>) или (A A A A <любая карта>)
фулл хаус или просто фулл: (2 2 2 5 5) или (A A A Q Q) в общем 3 карты одного достоинства и 2 другого
Флеш: 5 любых карт одной масти ( As Ts 9s 6s 2s )
Стрит: 5 карт подряд разных мастей (As Kd Qh Js Tc)
Тройка или трипс: 3 карты одного достоинства (2 2 2 <любая карта> <любая карта>)
Две пары: 2 пары карт одинакового достоинства: (A A 4 4 <любая карта>)
Пара: Просто пара карт (A A <любая карта> <любая карта> <любая карта>)
И пустая комбинация, то есть когда нет ничего из вышеперечисленного.
Сравнение идет просто: Любая комбинация бьет ту, что ниже ее.. то есть фулл бьет трипсу, а флеш-рояль бьет вообще все.
Если 2 игрока имеют комбинации одинакового ранга, то сравнивается достоинство “главных карт” комбинации. Например если у одного стрит от 9 до K а у другого от 6 до T то выигрвает первый. Если оба собрали, допустим, по паре тузов, то дальше смотрятся их остальные карты (кикеры). Пример: 1: (A A T 6 7) 2: (A A J 2 3) - выигрывает второй или 1: (A A J 3 2 ) 2: (A A J 6 2) - выигрывает второй, так как 6 > 3.
Если 2 комбинации пустые, то побеждает та, у которой самая высшая карта из неодинаковых (она же кикер).
Теперь к питону:
У меня есть списки карт
например
['Ks', 'Qs', '7c', 'Jc', 'Td', 'Ah', 'Ad']
PS: задача эта “для себя”. Просто хочу понять алгоритм.
Идея как составить максимальную комбинацию из 7, вроде есть – просто пройти вниз по возможным комбинациям (от флеш рояля до пары) и найти ту, которая соответствует какой-то группе.
Но вот как сравнить 2 комбинации мой гуманитарный мозг отказывается придумывать :(
PPS: Может кому еще задача интересной покажется :)