Напишите код, чтобы определить, кто выигрывает четырехкарточный трюк в игре « Пики» . Побеждает несколько байтов.
Входные данные представляют собой строку, в которой перечислены четыре карты, сыгранные в такой последовательности, как TH QC JH 2H
(Десять Червей, Королева Трефов, Валет Червей, Двое Червей). Карта состоит из двух символов: масти из CDHS
и стоимости из 23456789TJQKA
. Вы гарантируете, что ввод действителен, и карты отличны.
Вы должны вывести число 1, 2, 3 или 4 для победителя трюка. В этом примере TH QC JH 2H
, трюк сердец побеждает, поэтому вы должны вывести 3.
Ваш ввод и вывод должны быть точно такими, как описано, за исключением того, что завершающие символы новой строки являются необязательными.
Вот пиковые правила для победы в трюке. Выигрышная карта является самой высокой из четырех, с некоторыми оговорками. Пики - козырный костюм , поэтому любая лопата превосходит любую не лопату. Масти первой сыгранной карты являются главными , и выиграть могут только карты этой масти или пики. Карты одной масти сравниваются по их значениям, которые приведены в порядке возрастания 23456789TJQKA
.
Тестовые случаи:
TH QC JH 2H
3
KC 5S QS 9C
3
QD 2D TD 5D
1
9S 5D AD QS
4
3D 4C 3H JH
1
9S 4S TS JS
4
5H 9H 2C AD
2
5S 4C 3H QD
1
2H 2S KH AH
2
источник
.e
что это того стоит - использованиеo
на 1 символ короче, как мне кажется..e
28. Но решение 27 заканчивалось на a)
и поэтому также имело 28 байтов. : oops:+@z1"KTA"
на"KTAZ"
, но вместо использования строк использовать непосредственноJ"KTAZ"
в начале и+@z1J
доJ
.X
необязательным (только если a и b являются строками). Но я не совсем уверен, еслиXab)
следует оценитьXab_b
(инвертированный b, было бы хорошо для таких вещей, какXa"</\>"
) илиXab+tbhb
(b сдвинут). Каковы ваши предпочтения?CJam,
3433 байтаАлгоритм
Логика проста. У меня есть особая сортировка, в которой я сначала отдаю приоритет второму персонажу, представляющему костюм. При этом Пики получают наивысший приоритет, а затем первый брошенный номер. Остальные все есть
-1
. Тогда я вроде на первый символ с перекачкаT
сA
иQ
сK
иметь лексическую сортировку.Объяснение кода
Прежде всего, давайте посмотрим, каков лексический порядок номиналов карт:
Итак, все номера в правильном положении.
J
также в правильном положении. Нам нужно поменяться местамиK
иQ
иJ
иA
получить лексический порядок.Попробуйте онлайн здесь
источник
JavaScript (ES6), 112
Просканируйте список и верните позицию наибольшего найденного значения.
Запустите сниппет для тестирования (в Firefox)
источник
Perl, 73 байта
Попробуй меня .
Преобразует имена карт так, чтобы порядок значений в игре соответствовал алфавитному порядку, затем выбирает самое высокое путем сортировки и ищет его в исходной строке для определения позиции.
источник
Рубин, 59 + 2 = 61
С флагами командной строки
na
запуститеисточник
J, 47 байт
Использование:
Метод:
'S[second char of input]AKQJT9876543'
строке. Не найденные символы получают значениеlast position + 1
неявно. Дальнейшие символы имеют гораздо меньшее значение (value=(16-position)!
).TH_
QC_
9S_
и8S
).(К сожалению, J не может сравнивать символы или строки напрямую. Он может только проверять их равенство, что исключает некоторые другие подходы для этой задачи.)
Попробуйте это онлайн здесь.
источник
C #, 237
Как это работает: итерируйте каждую руку, чтобы вычислить «ценность» карты. Сохранить индекс с наибольшей ценностью. Значение карты определяется как ранг карты, умноженный на 0, если это не спейд или начальная масть, 1, если это начальная масть, и 9, если это лопатка, но не начальная масть. (9 выбран b / c 2 * 9 = 18> A = 14 и 9 - один символ)
источник
Pyth,
3633 байтаДовольно простой подход, использует сортировку с пользовательской ключевой функцией, а затем находит индекс с наибольшим значением.
источник
e
) вы можете получить последний элемент, так что поиск наибольшего значения - это просто сортировка с последующим получением последнего элемента.Pyth, 31 байт
Попробуй это здесь.
Как это устроено:
Правильный способ прочитать эту процедуру обратно вперед. Процедура сортирует нужную карту в конец списка, затем вытаскивает ее и находит ее индекс в исходном списке.
cz
: Генерирует список строк карт.c
chop, как правило, является двоичной функцией (arity 2), но при вызове только одного входа служит.split()
строковым методом.S
: Применяется обычное поведение сортировки, при котором карты с меньшим номером сортируются раньше, чем карты с более высоким номером.ox"TJQKA"hN
: Это упорядочивает карты по индексу (x
) в строке"TJQKA"
первой буквы карты (hN
). Для карточек с номерами первая буква не найдена, что дает результат-1
. Поскольку функция сортировки Pyth стабильна, порядок пронумерованных карт не изменяется.o}@z1Z
: Затем мы определяем, соответствует ли масть первой сыгранной карты (@z1
) рассматриваемой карте. Так какTrue
сортировка позадиFalse
, это отправляет карты ведущего костюма назад.o}\SN
: Это то же самое, что и ранее, но оно сортирует по тому,S
находится ли письмо на карточке, посылая пики обратно.hxczde
: Это извлекает последнюю карту, отсортированную таким образом (e
), находит ее индекс в списке карт (xczd
) и увеличивает на 1 (h
), давая желаемое местоположение игрока.источник