Ваш друг пригласил вас в последнюю минуту в покер с высокими ставками, и, как ученый, вы решили использовать свои навыки, чтобы получить преимущество в игре. Ваша задача будет заключаться в том, что с учетом 2 cards
(вашей руки) и 0, 3, 4 or 5 cards
( раздачи карт) вы должны решить, какую наилучшую возможную руку вы сможете получить. Если все 7 карт приведены в качестве аргументов, ответ довольно ясен. Если дать меньше, проблема становится более сложной. Однако этого недостаточно для того, чтобы дать вам необходимое преимущество, вы также должны рассчитать наилучшую возможную комбинацию из оставшихся карт, чтобы понять, что также могут иметь ваши оппоненты.
Холдем освежающий
Если вы не знаете о холдеме, каждый игрок в игре начинает с 2 картами в качестве «руки». В течение 3 ходов раскрываются дополнительные карты для всех игроков. Первый ход, 3 карты раскрыты. Во второй, еще 1 и в третий раз раскрывается финальная карта. Две карты, указанные вначале, представляют вашу руку, в то время как последняя представляет 0, 3, 4 или 5 карт, выдаваемых последовательными ходами.
Возможные номера:
[2,3,4,5,6,7,8,9,T(10),J,Q,K,A]
Возможные костюмы:
[S,C,H,D]
Полная колода:
[2S,3S,4S,5S,6S,7S,8S,9S,TS,JS,QS,KS,AS, # Spades.
2C,3C,4C,5C,6C,7C,8C,9C,TC,JC,QC,KC,AC, # Clubs.
2H,3H,4H,5H,6H,7H,8H,9H,TH,JH,QH,KH,AH, # Hearts.
2D,3D,4D,5D,6D,7D,8D,9D,TD,JD,QD,KD,AD] # Diamonds.
Ранжирование рук:
1:Royal Flush (A-K-Q-J-10, all from the same suit).
2:Straight Flush (Sequential cards, all from the same suit).
3:Four-of-a-Kind (Self explanatory).
4:Full House (3-of-a-kind and a 2-of-a-kind).
5:Flush (All cards are from the same suit).
6:Straight (Sequential Cards, any suits).
7:3-of-a-Kind (Self explanatory).
8:2-Pair (Double 2-of-a-Kind).
9:Pair (2-of-a-Kind).
10:High Card (You have absolutely nothing except a single card).
Давайте возьмем пример или два и пройдемся по ним:
Простой пример:
[AS, AC],[AH,AD,9S,9C,9H]
-> 3
(Четверо в своем роде), 3
(Четверо в своем роде)
Лучшая возможная рука, которую вы будете иметь в этой настройке - это рука четверки. Лучшая возможная рука, которую могли иметь ваши оппоненты, это также 4-из-в-роде, так как вы не можете иметь KQJ10 в их двухкарточных руках.
[5C,2C],[6C,4C,JH,JD]
-> 2
(Стрит-флеш), 3
(4 вида)
Вы рискуете для стрит-флеша, но, поскольку у вас в руке 2 / 5C, больше никто не может быть, потому что вы держите обе средние карты. Лучшее, на что они могут надеяться - это иметь 2 карманных валета и получить Джек на флопе.
[JS,JC],[]
-> 1
(Роял Флэш), 1
(Роял Флэш)
Никакой информации, которую вы можете использовать против них, не было предоставлено, все, что вы можете сказать на данный момент, это то, что у них может быть только флеш-рояль в алмазах / сердцах, но вполне возможно, что вы получите флеш-рояль, как и они. Фактически, все входные данные, где флоп еще должен произойти, должны давать ответ 1-1.
[2C,4S],[3C,7S,9D,AH,JD]
-> 10
(старшая карта), 7
(3-в-роде)
Это пример того, где вы абсолютно сбиты с толку, и нет возможности стрита или флеша на ривере. Под лучшей рукой здесь подразумеваются карманные тузы, в результате чего получается 3-в-роде.
Требования к вводу / выводу
- Вклад должен быть разделен между тем, что у вас на руках, и тем, что является общедоступным знанием; Это, вероятно, будет проще, независимо от реализации.
- Карты могут быть кортежами или струнами, на ваше усмотрение.
- Рука и игровое поле могут быть массивами или строками с разделителями.
- Выходными данными должны быть два индекса из предоставленного мною списка рук (EG [2,1]).
- Он может быть возвращен как часть функции, распечатан на консоль или выведен подходящим способом.
- Должно быть два разных значения: одно для вашей лучшей руки, другое для лучшей.
- 10 может быть представлен как
T
или как10
, что имеет смысл для вас. - Стандартные лазейки запрещены.
Критерии победы
- Это код-гольф , самый низкий счетчик байтов с тай-брейком после даты поста.
источник
A
и1
в возможных разрешенных картах? Кроме того, я не думаю, что есть действительно веская причина требовать сокращения лица над числовыми значениями, такими как11
.A
и1
. Все остальное выглядит хорошо.Ответы:
Haskell ,
433 430425 байт-5 байт благодаря @Laikoni
Попробуйте онлайн!
Ungolfed (та же идея, немного другая структура):
Очень медленный, так как специального корпуса вообще нет (например, если карты не были показаны, всегда возможен флеш-рояль). Большая часть моих усилий в гольфе ушла на эту
rank_hand
функцию;#
можно играть в гольф намного больше, комбинируя карты и тому подобное.hand#table
рассчитывает оптимальные оценки для вас и вашего оппонента. Не проверяет ошибки.источник
s/elem/e/g
после определенияe=elem
, так что вы должны сэкономить 9 байт. Я думаю, что вы также можете удалить некоторые пробелы, особенно там, где идентификаторы следуют непосредственно за числамиe=elem
выведенный тип Int-> Bool, поэтому он не компилировался, когда я использовал e для нецелых вызовов elem. Я пытаюсь понять, почему, что было. Спасибо за подсказку на местах!h#t=let[...]in[...]
можно сократить доh#t|let[...]=[...]
. Иhead n
естьn!!0
. У охранника&&
может быть просто,
.