Отказ от ответственности: ModTen это вымышленная карточная игра, которая была создана с единственной целью этого испытания.
Правила ModTen
В ModTen играют стандартной колодой из 52 карт. Поскольку полные правила еще не изобретены, мы сосредоточимся исключительно на ранжировании рук.
Выигрышная комбинация в ModTen. Графика из Википедии .
Значения карт
Карты имеют следующие значения:
- 2 до 9 : стоит их номинал
- Десять : 0 баллов
- Джек : 3 очка
- Королева или король : 8 очков
- Ace : 9 очков
Ручные ценности
ModTen рука состоит из двух карт . Базовое значение руки получается умножением стоимости обеих карт и сохранением только последней цифры (т. Е. Применением по модулю 10).
Например, значение 7 ♥ - Q ♣ равно « », потому что .
Единственное другое правило в ModTen состоит в том, что подходящие карты стоят больше, чем не подходящие. По соглашению мы добавим «s» к значению, если обе карты одной масти.
Например, значение 9 ♠ - 5 ♠ будет отмечено как « », потому что и карты подходят.
Рейтинг рук и победитель
Приведенные выше правила приводят к 18 разным разрядам рук, которые суммированы в следующей таблице, от самого сильного до самого низкого (или от самого редкого до самого распространенного). Вероятности приведены только для информации.
Учитывая две руки, выигрывает рука с самым низким рангом. Если обе руки одного ранга, то это ничья (нет разрыва связи).
hand rank | hand value(s) | deal probability
-----------+---------------+------------------
1 | 9s | 0.30%
2 | 3s | 0.60%
3 | 1s | 0.90%
4 | 7s | 1.21%
5 | 5s | 1.51%
6 | 3 | 1.81%
7 | 9 | 2.26%
8 | 8s | 2.71%
9 | 6s | 3.02%
10 | 1 or 7 | 3.62% each
11 | 2s or 4s | 3.92% each
12 | 5 | 4.98%
13 | 0s | 5.43%
14 | 8 | 8.14%
15 | 6 | 9.95%
16 | 2 | 11.76%
17 | 4 | 13.57%
18 | 0 | 16.74%
Соревнование
Имея две руки ModTen , выведите одно из трех непротиворечивых значений по вашему выбору, чтобы сказать:
- первый игрок выигрывает
- второй игрок выигрывает
- это ничья
Применяются следующие правила:
- Карта должна быть описана его ранга в верхнем регистре (
2
,3
, ...,9
,T
,J
,Q
,K
илиA
) , а затем его костюм в нижнем регистре (c
,d
,h
илиs
, для трефы, бубны, червы и лопатами). - Вы можете использовать
"10"
вместо,"T"
но любая другая замена запрещена. Пока соблюдаются вышеуказанные правила, вы можете взять руки в любом разумном и однозначном формате. Вам разрешено принимать звание и костюм как два отдельных символа, а не как одну строку.
Некоторые допустимые форматы ввода:
"7c Qh 8s Ks"
[["7c","Qh"], ["8s","Ks"]]
[[['7','c'], ['Q','h']], [['8','s'], ['K','s']]]
- и т.п.
Вместо использования 3 последовательных различных значений ваш вывод также может быть отрицательным , положительным или нулевым . Пожалуйста, укажите выходной формат, используемый в вашем ответе.
- Это код-гольф .
Контрольные примеры
Игрок 1 выигрывает
["Js","3s"], ["Ks","Kh"]
["7h","9h"], ["9s","7c"]
["Ah","5s"], ["Ts","8s"]
["Ts","8s"], ["Jh","2s"]
["4h","8s"], ["Qh","Ks"]
Игрок 2 выигрывает
["Th","8d"], ["6s","Kd"]
["Jc","5c"], ["3s","9s"]
["Jc","Jd"], ["9h","Ah"]
["2d","4d"], ["3h","3s"]
["5c","4c"], ["3c","2c"]
Привлечь
["Js","3s"], ["3d","Jd"]
["Ah","Ac"], ["3d","9s"]
["Qc","Kc"], ["6d","4d"]
["2d","3d"], ["3s","2s"]
["Ts","9c"], ["4h","5d"]
источник
{{J, s}, {3, s}}
будет в порядке?Ответы:
Python 3 ,
114110 байтПопробуйте онлайн!
@Arnauld предложил идею слияния строк значений карт и таблиц рангов. После некоторых попыток мне удалось создать объединенную строку
R="T 2J45UNK9RL<3SLM;QAK:O>=/678"
, которая имеет ту же длину, что и исходная строка значения карты. ПодстрокиR[6:25]="UNK9RL<3SLM;QAK:O>=/"
служат в качестве таблицы ранга, а также справочной таблицы значений карты для3
,9
,A
,K
, иQ
. Декодирование значения ASCII новой таблицы рангов имеет тот же эффект ранжирования, что и предыдущая таблица рангов.Использование байтовых строк в качестве входных данных экономит 4 байта.
Использование
cmp
в Python 2 может уменьшить решение до 102 байт, как показано решением @ xnor .Python 3 ,
165142130129 байтПопробуйте онлайн!
-23 байта благодаря Джонатану Аллану
-2 байта благодаря @ovs
-1 байт благодаря @mypetlion
Ungolfed:
Функция
f
принимает два аргумента, представляющих руку игрока 1 и игрока 2. Она возвращает положительное, отрицательное или нулевое значение в случае выигрыша игрока 1, выигрыша игрока 2 или ничьи, соответственно. Каждая рука закодирована как одна строка, например, «7cQh».источник
"HC92FA51GAB4E893D760"[s==t::2]
cmp
недоступно в Python 3)str.find
вместо того,str.index
чтобы сохранить один байт. Единственное различие в поведении между этими двумя методами состоит в том, чтоindex
выдает ошибку, когда элемент не найден, аfind
возвращает-1
. Так что это не будет проблемой для вашего кода.Сборка x86-16,
8783 байтаBinary:
разобранное:
Ввод осуществляется в виде строки, такой как
Js3sKsKh
указатель вSI
. ВыходZF = 0 and SF = OF
(проверить сJG
), если игрок 1 выиграл,SF ≠ OF
(проверить сJL
), если игрок 2 выиграл илиZF
(проверить сJE
), если ничья.Вывод с использованием тестовой программы DOS:
Загрузите и протестируйте MODTEN.COM для DOS.
источник
05AB1E ,
4137 байт-4 байта благодаря @Grimy .
Введите в виде списка список символов, как в третьем примере формата ввода в описании задачи. Т.е. P1
7c Qh
и P28s Ks
будут вводиться как[[["7","c"],["Q","h"]],[["8","s"],["K","s"]]]
. (И использует"10"
для10
.)Выводит отрицательное целое число, если игрок 1 выигрывает; положительное целое число, если игрок 2 выигрывает; или 0, если это ничья.
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
Смотрите этот 05AB1E наконечник шахты (разделы Как пользоваться словарем? Как сжать большие целые числа? И Как сжать целые списки? ) , Чтобы понять , почему
•V›{₆Ÿ&∊WÍj¸•
это36742512464916394906012008
,•V›{₆Ÿ&∊WÍj¸•19в
это[18,10,16,6,17,12,15,10,14,7,13,3,11,2,11,5,9,4,8,1]
,‘ߌQ‘
это"JAKEQ"
иŽćS
это39808
.источник
T
как10
, так что вы можете просто удалитьT
изJTQKA
(и использовать сжатое целое число 3889 вместо 30889). Кроме того,T* ... +
может быть... «
.10
вместо этогоT
разрешено, но не думал о ! И то , что я вижу сейчас, очевидно ...>.> Спасибо!T*...+
...«
PHP ,
212185178149 байтПопробуйте онлайн!
Ввод осуществляется через командную строку. Выход на
STDOUT
это отрицательный , если игрок 1 выигрывает, положительный , если игрок 2 выигрывает,0
если галстук. Пример:источник
-1
,1
или0
.Желе , 46 байт
Попробуйте онлайн!
Полная программа, принимающая в качестве аргумента, например,
["7h","Ks"],["4s","Ts"]
и печатающая ноль, если оба игрока рисуют, положительная, если игрок 1 выигрывает, и отрицательная, если игрок 2 выигрывает.источник
C (gcc) ,
172167165164 байтаПопробуйте онлайн!
2 байта сброшены благодаря @ceilingcat!
В основном это порт решения @ Joel's Python3, но без кодировки base18. Ожидает ввод в виде одной строки с пробелом, разделяющим руки двух игроков, и выводит целое число, которое является положительным, отрицательным или нулевым, чтобы указать, что игрок 1 выиграл, игрок 2 выиграл или, если это ничья.
источник
Perl 6 ,
1011009488 байт-1 байт благодаря Джо Кингу
Попробуйте онлайн!
Принимает ввод как
f(((<J ♠>, <3 ♠>), (<10 ♠>, <K ♥>)))
использование10
для десяти. Возвращает значение <0, если игрок 1 выигрывает,> 0, если игрок 2 выигрывает, 0, если это ничья.объяснение
источник
Древесный уголь , 97 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Принимает ввод в виде двух строк по 4 символа, например
QcKc
6d4d
и выводит целое число со знаком. Объяснение:Сжатая строка
2345678903889
представляет значения карты.Цикл по каждой возможной паре значений.
Обведите каждую возможную вторую карточную масть. Без ограничения общности мы можем предположить, что первая карта имеет масть 3, поэтому вторая масть может варьироваться от 0 до 3, если значения не совпадают, в этом случае она может варьироваться только от 0 до 2.
Вычислите модифицированную оценку руки, которая является значением удвоенной руки, плюс 1, если масти одинаковые (то есть вторая карта имеет масть 3).
Сжатая строка
23456789TJQKA
представляет символы карты. Карты ввода ищутся в этой строке, а затем позиция используется для индексации в первой строке, чтобы получить значение карты.Инициализируйте результат до 0.
Обхватите обе руки.
Вычислите модифицированную оценку руки и, следовательно, ее частоту, и вычтите результат из этого.
Выведите разность частот.
источник
C # (интерактивный компилятор Visual C #) , 139 байт
Попробуйте онлайн!
источник
Perl 5
-p
, 107 байтПопробуйте онлайн!
Входные данные:
(На самом деле запятая может быть любым символом.)
Выход:
источник