Hearts - это карточная игра для 4 игроков. Каждый трюк берет игрок, который разыграл старшую карту ведущей масти. В конце каждой руки игроки получают штрафной балл в зависимости от взятых ими штрафных карт; Задача состоит в том, чтобы определить баллы по правилам Microsoft Hearts .
вход
Входными данными являются 4 списка (или разделенная строка, массив и т. Д.), Показывающие штрафные карты, взятые каждым из 4 игроков. Штрафные карты
2♥, 3♥, 4♥, 5♥, 6♥, 7♥, 8♥, 9♥, 10♥, J♥, Q♥, K♥, A♥, Q♠
который мы представим как
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 0
соответственно.
Выход
Выход - 4 штрафных очка, понесенные 4 игроками (список, строка, массив и т. Д.). Скоринг выглядит следующим образом:
- Каждое сердце (
♥
от целых чисел1
до13
включительно) получает 1 балл - Пиковая дама (в
Q♠
лице0
) получает 13 очков - Исключение: если игрок забрал все штрафные карты (называемые стрельбой по луне), то он получает 0 очков, в то время как все остальные игроки получают 26 очков.
Контрольные примеры
[2, 8, 7, 1], [3, 4], [], [9, 5, 6, 0, 10, 11, 12, 13] --> 4, 2, 0, 20
[0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [], [], [1] --> 25, 0, 0, 1
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0], [], [], [] --> 0, 26, 26, 26
Самый короткий код в байтах побеждает.
источник
_26&1b
, -2 байта.1b
... Я пытался найти короткий путь , чтобы превратиться[26]
в26
и[]
в ,0
но как - то , что не приходила мне в голову. Спасибо :)R,
85 7774 байтаБезымянная функция, которая принимает R-список в качестве входных данных. Работает путем подсчета количества элементов
>0
и добавляет 13, если какой-либо элемент в каждом векторе<1
(т. Е. Пиковая дама), и сохраняет какz
.Если какой - либо элемент в
z
ИС>25
, вернуть26-z
, иначе вернутьz
.Попробуйте это на R-Fiddle
источник
26-z
работать?C ++ 14, 158 байт
Как неназванная лямбда:
Требуется
vector<vector<int>>
и возвращаетсяvector<int>
Ungolfed:
Несколько тестов для вас:
источник
Python 2,
757271 байтПринимает вход как
[2, 8, 7, 1], [3, 4], [], [9, 5, 6, 0, 10, 11, 12, 13]
источник
12*(0in a)
.print[[x,26-x][26in i]for x in i]
на один байт короче.PHP, 113 байт
Функция принимает массив массивов, возвращает массив значений.
Удивите другое отображение массива в PHP: циклы с ссылочными элементами. Вааа короче
array_map
.источник
Haskell,
625956 байтИспользование:
источник
f
какf n=13^0^n
.f x|all(<26)x=x|0<1=map(26-)x
и использование его вместо лямбда-функции экономит несколько байтов.05AB1E ,
262221 байтКонечные пробелы должны быть удалены из входных данных, чтобы они интерпретировались как массив. Финал был вдохновлен другими ответами при использовании (26-х), когда игрок собрал все штрафные карты.
Попробуйте онлайн!
Это все еще выглядит довольно пригодным для игры в гольф с дублированными константами и условными утверждениями
Предыдущая версия, 26 байт
(Один байт для каждой точки в максимальном значении штрафа)
Я решил сохранить его, так как его длина лучше всего подходит для этого вызова, на мой взгляд :).
Попробуйте онлайн!
источник
Python 3, 101 байт
Полный код:
источник
12*(c<1)+1
на 2 байта короче(1,13)[c==0]
.26*(s>25)
на 3 байта короче(26,0)[s==26]
.JavaScript (ES6),
82807772706967 байтСохранено 2 байта благодаря @Neil
Сломать
источник
c=>b*26^c
экономит 2 байта.Пип , 28 байт
27 байт кода, +1 для
-p
флага.Принимает ввод в командной строке в виде строки, представляющей вложенный список, например
"[[2 8 7 1] [3 4] [] [9 5 6 0 10 11 12 13]]"
(кавычки не нужны в TIO). Попробуйте онлайн!источник
Рубин, 59 байт
Или, альтернативно,
Если только у одной руки есть карты, мы хотим, чтобы пустые руки получили значение 26, а рука с картами - значение 0. Я делаю это, вызывая
min
руки - это возвращаетnil
пустой массив, а затем Я делаю||
это на 26. В других случаях я считаю количество карт в руке, а затем добавляю 12 к Пиковой даме.источник
Scala, 93 байта
Использование:
Объяснение:
Я мог бы использовать
%toSet 26
вместо% contains 26
потому чтоSet
'Sapply
методаcontains
и не получить, по-индекс , какSeq
-еисточник