Как мне найти лучшую покерную комбинацию из 9-карточной комбинации между 4 игроками?

Я попытался просмотреть несколько источников в Интернете, и все они касаются 5 и 7 карточных рук. Кроме того, я на самом деле не ищу код, я попытаюсь сделать это самостоятельно (хотя, возможно, если вы хотите, я хочу реализовать это на Python или JavaScript). Я просто хочу, чтобы кто-нибудь объяснил мне, как найти такую ​​руку (используя псевдокод).

По сути, я спрашиваю: как мне найти лучшую покерную комбинацию из 9-карточной комбинации между 4 игроками?

Должен ли я просто назначить все самые высокие номера покерных комбинаций в рейтинге, а затем проанализировать руки каждого игрока и посмотреть, содержит ли их рука это число? Это кажется немного утомительным, и я не уверен, что это правильный способ.

Кроме того, я заметил, что другие оценщики настроены на оптимизацию, и некоторые подсчитывают количество бит на каждую сыгранную карту, что меня смутило.

РЕДАКТИРОВАТЬ: вот игра, над которой я работаю:

Это игра с сеткой 6x6, в которой четыре игрока берут карты, где бы ни приземлялась их фишка, они берут эту карту. Карты из стандартной колоды из 52 карт, но карты открыты, и используются только 36 случайно выбранных карт из колоды.

В конце концов, к концу игры игрок может держать в руках максимум 9 карт.

Чтобы выиграть игру, нужно собрать самую высокую покерную комбинацию среди четырех игроков вокруг вас.

Итак, по сути, если у вас флеш-рояль, а у всех остальных пара или стрит, они проигрывают.

В другой игре, где самая сильная рука - это стрит, а у остальных - тройка или две пары, тогда побеждает тот, у кого есть стрит.

Таким образом, самая высокая рука в покере - это самая высокая рука по сравнению с рукой другого игрока. Это рука с наивысшим рейтингом карт среди 4 игроков.

Покерная комбинация - это обычная комбинация, которая может быть или не быть самой высокой по рангу.


person Kaylie    schedule 15.05.2013    source источник
comment
Определите poker hand и highest poker hand.   -  person Kabie    schedule 15.05.2013
comment
@Kabie, я заметил, что мог быть неясным. См. Редактирование выше. Спасибо!   -  person Kaylie    schedule 15.05.2013
comment
Значит, одна рука чаще всего использует только 5 карт, не так ли?   -  person Kabie    schedule 15.05.2013
comment
@Kabie, это зависит от того, что вы имеете в виду под использованием. В конце игры в вашей руке оценивается только 5 карт (которые составляют возможную покерную комбинацию, высокую или низкую) из не более чем 9 карт.   -  person Kaylie    schedule 15.05.2013
comment
По сути, мне нужно проанализировать комбинацию из 9 карт, чтобы увидеть, есть ли в ней 5-карточная покерная комбинация. Если рука содержит 5-карточную покерную комбинацию, выделите ее для оценки и сравнения среди других 4 игроков.   -  person Kaylie    schedule 15.05.2013


Ответы (1)


Для 9-карточной руки есть только 126 возможных комбинаций из 5 карт. Таким образом, вы можете просто перебирать их, чтобы найти самый высокий. itertools.combinations(9_cards, 5) может генерировать их все.

Чтобы найти наивысшее, в простейшем приспособлении можно было бы определить функцию, которая дает руке оценку. Затем используйте эту функцию как ключ: max(all_5_cards_hands, key=hand_score)

Вы можете использовать кортеж для представления оценки. Лидер по раздаче, за которым следует рейтинг по картам.

Пример:

STRAIGHT_FLUSH = 9
...
TWO_PAIR = 2
ONE_PAIR = 1
HIGH_CARD = 0

hand_score('A7532')  # I omit suits here
# => (HIGH_CARD, 14,7,5,3,2)
hand_score('KK333')
# => (FULL_HOUSE, 3, 13)
hand_score('33444')
# => (FULL_HOUSE, 4, 3)
hand_score('AKQJ0')
# => (STRAIGHT, 14)

# Tuples can be easily compared:
(HIGH_CARD, 14,7,5,3,2) < (STRAIGHT, 14)
# => True
person Kabie    schedule 15.05.2013
comment
МММ ясно. Я попробую и посмотрю, получу ли что-нибудь. Большое спасибо @kabie. Кстати, что, если бы общее количество карт в руке было меньше 9 карт. Например, в игре кто-то может перейти на место, где нет карты, и не получит карту за этот ход. Таким образом, у этого игрока может быть 8 карт вместо 9 карт. И тогда у другого игрока может быть больше 10 карт в конце. Итак, я просто подумал, давайте сделаем это общим, что, если у игрока может быть x количество карт, и в этой руке есть вероятность 5 карт? - person Kaylie; 15.05.2013
comment
И еще кое-что, как мне вернуться к игроку, у которого самая сильная рука в покере? - person Kaylie; 15.05.2013
comment
@Kaylie: 9_cards - это рука игроков. C(14,5) - это 2002 год. Так что это все еще вычислимо. Так что можно просто рукой заменить 9_cards. Для ссылки на игрока. Обычным способом можно было бы просто назначить highest_hand как атрибут Player (я полагаю, вы используете класс для представления игрока?). Или сделайте это методом класса. - person Kabie; 16.05.2013
comment
Да, у меня есть класс, который представляет игрока. Ужасно глупый глупый вопрос, но как мне назначить high_hand в качестве атрибута Player. Вы можете привести мне пример? - person Kaylie; 17.05.2013
comment
@Kaylie: Допустим, у вас есть player1 = Player(), тогда подойдет player1.highest_hand=some_hand. - person Kabie; 18.05.2013