Назовите покерную комбинацию
Учитывая пять карт, выведите название покерной руки, которая будет одной из:
High card
One pair
Two pair
Three of a kind
Straight
Flush
Full house
Four of a kind
Straight flush
Royal Flush
Если вы сомневаетесь, обратитесь к правилам на http://en.wikipedia.org/wiki/List_of_poker_hands .
вход
5 карт из аргументов стандартного ввода или командной строки. Карта представляет собой двухбуквенную строку в форме RS
, где R - ранг, а S - масть. В рядах являются 2
- 9
(номер карты), T
(десять), J
(Jack), Q
(Queen), K
(король), A
(Ace). В костюмы являются S
, D
, H
, C
для лопаты, бубны, червы и клубов соответственно.
Пример карт
5H - five of hearts
TS - ten of spades
AD - ace of diamonds
Пример ввода => желаемый вывод
3H 5D JS 3C 7C => One pair
JH 4C 2C JD 2H => Two pair
7H 3S 7S 7D 7C => Four of a kind
8C 3H 8S 8H 3S => Full house
правила
Самый короткий код выигрывает
редактировать
Выглядит великолепно до сих пор! Я не могу на самом деле проверить все ответы, так как я не очень хорошо знаю эти языки и у меня нет компиляторов / интерпретаторов для всех из них, но я подозреваю, что не все думали о том, что тузы могут быть как самыми высокими, так и самые низкие карты стрита (флеш) .
Ответы:
GolfScript (
209 208 207 206 200 199 197196 символов)Я использую предлагаемую свободу настройки капитализации: мой Стрит-Флеш и Роял-Флэш оба используют Флэш, чтобы повторно использовать слово из простого флеша.
Примечание: некоторые более ранние версии были глючными: они поддерживали аншлаг только тогда, когда пара имела меньшее значение, чем королевская пара. Их можно исправить, заменив пробел, разделяющий
- 0
на$
.демонстрация
источник
.&
для поиска различных символов в строке - очень полезный трюк.Придумал свой ответ :)
Питон -
312301298Создает список 2x2, где индексы двух измерений являются логическими проверками для флеша и стрита. В случае и того и другого мы проверяем, является ли это флеш-роялем или просто стрит-флешем. Если нет флеша и не стрита, мы проверяем другие руки:
m
иn
держим наибольшее и второе наибольшее количество карт одного ранга; имена рук хранятся в списке с индексами в соответствии сm
. Субтитры в значениях этого списка выполняются для того,n
чтобы отделить одну пару от двух пар и три вида от дома.Редактировать: Спасибо Нолен Роялти за спасение в общей сложности 20 символов!
источник
m,n=g([c.count(x)for x in set(r)])
наm,n=g(map(c.count,set(r)))
?Рубин 1.9 (
427359348338296292)РЕДАКТИРОВАТЬ : Исправлено для работы с низкими тузами.
Основная идея состоит в том, чтобы создать массив количества карт в каждом ранге, объединить цифры в строку, а затем запустить регулярные выражения, чтобы увидеть, какая форма руки подходит. Мы подсчитываем количество разных мастей, чтобы определить, проверять ли их по разным флешам (флеш, стрит-флеш, рояль-флеш) или другим формам (все остальное).
Принимает карты как отдельные аргументы командной строки, например так:
источник
C, 454 символа
Запуск из командной строки с карточками в качестве аргументов, например ./a.out 8C 3H 8S 8H 3S
Расширенная версия с комментариями:
Редактирование:
источник
Математика , 365
Вот мой взгляд на ответ Дэвида Каррахера.
Показано с пробелами для удобства чтения.
Однострочная версия:
источник
_
вместо{_,_,_,_}
К,
294295,
редактировать: добавлен 1 символ для Ace-low straights
источник
Python
334,326322 персонажаЯ знаю, что последний лайнер становится довольно нечитабельным, я выложу версию без игры в гольф, когда буду доволен своим решением.
источник
GolfScript,
258250 символовПрограмма ожидает ввода на STDIN, как указано выше, и выводит на STDOUT. Вы можете проверить код самостоятельно .
Изменить: Включенные предложения w0lf.
источник
" of a kind"
переменную, потому что она используется дважды."Straight"
AH KH 2C 3H 4H
считается стритом, но должна быть High картой.Mathematica -
500494465 символовЭто решение основано на демонстрации покера Эдом Пеггом-младшим. В этой версии карты обрабатываются внутренне как числа в
Range[2,14]
Образцы входов, выходов:
Заметки:
ф: флеш
с: карты (без масти)
s: прямой
t: {карты, люксы}
д:
источник
JH 4C 2C JD TH
?