Вызов:
Учитывая две руки из пяти карт, определите, какая из них выигрывает, используя стандартный рейтинг покерных рук .
Входные данные:
Десять карт отделяются пробелами от стандартного ввода или в качестве аргументов командной строки, в зависимости от того, что вы предпочитаете. Первые пять карт - рука Игрока 1, а последние пять - рука Игрока 2. Каждая карта представляет собой двухбуквенную строку в форме RS, где R - ранг, а S - масть. Ранги варьируются от 2 до 9, T для десяти, и J, Q, K и A для Джека, Королевы, Кинга и Туза соответственно. Костюмы H, D, C, S для сердец, бриллиантов, треф и пиков соответственно. Вы должны вывести номер игрока, который выиграл: «1» или «2».
Примеры карт:
AS - the Ace of Spades
QD - the Queen of Diamonds
2C - the Two of Clubs
TH - the Ten of Hearts
Примеры ввода в вывод:
5H 5C 6S 7S KD 2C 3S 8S 8D TD -> 2
Объяснение: У игрока 1 есть пара пятерок, а у игрока 2 - пара восьмерок.
5D 8C 9S JS AC 2C 5C 7D 8S QH -> 1
Объяснение: Ни у одного из игроков нет ничего особенного, но старшая карта Игрока 1 - Туз, а старшая Карта Игрока 2 - Королева.
2D 9C AS AH AC 3D 6D 7D TD QD -> 2
Пояснение: у игрока 1 есть три туза, у игрока 2 - флеш алмазов.
4D 6S 9H QH QC 3D 6D 7H QD QS -> 1
Объяснение: у обоих игроков есть пара ферзей, но вторая по величине карта Игрока 1 - это Девять, а у Игрока 2 - Семерка.
Правила и разъяснения:
- Обратитесь к стандартному рейтингу покерных комбинаций, чтобы узнать подробности сравнения рук.
- Вы можете предположить, что в каждой паре рук нет повторяющихся карт.
- Вы можете предположить, что в каждом конкретном случае есть определенный победитель.
- Костюм не учитывается в рейтинге рук. Например, два флеш-рояля разных мастей равны (поэтому любой вход, в котором у обоих игроков флеш-рояль недействителен по предыдущему правилу).
- Поскольку это кодовый гольф, выигрывает самый короткий ответ.
Примечания:
- Связанный с этим вопросом и этим .
- Основано на задаче Эйлера проекта 54
Ответы:
Haskell -
352339 знаковЗапускается:
Ungolf'd и прокомментировал, так что вы можете увидеть techinque:
источник
Питон -
774722707698685 символовЯ решил сгенерировать строку для каждой руки, которая представляет ее, начиная с символа для типа руки, затем следуют символы, описывающие конкретную вариацию типа (например, какая карта у вас была только 4?), А затем значения оставшихся карт в случае ничьей (если у обоих игроков одинаковая двойная пара, 5-ая карта должна решить, кто победит). Я тестировал это достаточно широко, но на самом деле я не играю в покер, поэтому надеюсь, что все правильно понял. Кроме того, я знаю, что это еще не полностью игра в гольф, я, вероятно, смогу сбрить несколько десятков символов позже.
источник
_=lambda c:chr(97+c)
. Кроме того, у вас есть ненужные пробелы после:
s и=
s. Наконец, используйте;
вместо новых строк разделение операторов, чтобы уменьшить количество пробелов, используемых для отступа.JavaScript -
526508использование:
ungolfed:
источник
источник
Perl,
801733 символаЯ считаю, что это довольно простая реализация. В основном, для каждой руки мы сортируем костюмы и лица отдельно. Затем мы делаем еще одну копию граней с тузами, считающими низкими, чтобы мы могли проверить прямые с низкими тузами. Затем мы определяем, есть ли у нас флеш или стрит, и какова старшая карта. Затем мы просто проверяем совпадения в порядке очков (сначала мы проверяем стрит-флеши, затем четыре типа и т. Д.). Фактическая оценка - это просто конкатенация типа руки, за которой следуют номиналы карт в порядке их важности (это _s () в версии без гольфа, u () в версии для гольфа). Вот:
И вот эквивалент менее гольфовой:
источник
AH 2C 3S 4S 5D 6C 7S 7C 7D TD
дает результат2
, но я думаю, что стрит бьет три в своем роде