Вступление
Skat - традиционная немецкая карточная игра для 3 игроков. Колода состоит из 32 карт: туз, король, дама, валет, 10, 9, 8, 7 во всех 4 мастях (трефы, пики, червы, алмазы).
В каждом раунде один игрок играет соло, а два других играют против него. В начале раунда каждому игроку раздается по 10 карт, остальные 2 карты называются скатом и кладутся посередине лицевой стороной вниз. Индивидуальный игрок определяется по фазе торгов. Это та часть игры, с которой вам придется столкнуться в этой задаче, подробнее об этом ниже.
Игрок, выигравший фазу торгов, становится сольным игроком. Он поднимает скат, а затем бросает две карты (которые могут быть одинаковыми, другая команда не знает), выбирает козырную масть, и начинается раунд.
Один раунд состоит из десяти трюков. Игрок, выигравший трюк, ведет следующий, пока не будут разыграны все карты. Я не буду объяснять правила здесь, но вы должны знать, что хорошо иметь много козырей. Если вы хотите узнать о правилах, прочитайте статью в Википедии, на которую я ссылался в начале этого поста, но она не нужна для этой задачи.
Соревнование
Вы хотите научить своих двух сыновей играть в скат. Правила не так уж сложны, поэтому они быстро в него входят. Единственное, что доставляет им трудности - это ставки, в частности, подсчет игровой ценности их руки. Итак, вы решили написать небольшую программу, которая выводит максимальную ценность игры, которую они могут предложить, учитывая их текущую руку.
Расчет стоимости игры
Каждая рука имеет определенную игровую ценность. Это определяется количеством последовательных валетов и костюмом, который вы хотите выбрать в качестве козыря. Давайте начнем с первого фактора, домкраты!
Фактор Джека
Валеты всегда козыри, и они бьют все остальные козыри. Порядок силы между четырьмя домкратами:
- Джек треф (самый высокий)
- Пиковый валет
- Валет червей
- Бубновый валет (самый низкий)
В дальнейшем объяснении я буду ссылаться на них с номерами, которые я им присвоил здесь.
Вы помните, что есть какой-то фактор, который вы получаете от валетов в руке, который является частью игровой ценности? Большой! Вот как вы это получите:
Этот фактор Джека - это число верхних валетов (см. Порядок выше) в последовательности плюс 1. Таким образом, если у вас есть все 4 домкрата, то это 4 + 1 = 5. Если у вас есть только первые 2 домкрата, это 2 + 1 = 3.
В качестве альтернативы, чтобы сделать вещи немного сложнее, фактор Джека также может быть числом старших валетов в последовательности, которые вы пропустили , плюс 1. Так что, если вы пропустили первый, это 1 + 1 = 2. Если вы отсутствуют первые 3, это 3 + 1 = 4. Вот несколько примеров, используя нумерацию выше:
[1, 4] -> 1 + 1 = 2
[1, 2, 4] -> 2 + 1 = 3
[2, 3, 4] -> 1 + 1 = 2
[1, 2, 3, 4] -> 4 + 1 = 5
[] -> 4 + 1 = 5
Это был первый фактор. Вот как вы получаете 2-й:
Фактор иска Трампа
Этот намного проще. 2-й фактор определяется козырем, который выбирает одиночный игрок, используя следующее отображение:
Clubs -> 12
Spades -> 11
Hearts -> 10
Diamonds -> 9
Это было легко, не так ли?
Значение игры
Значение игры является продуктом двух факторов. Довольно легко, вы думаете? Неправильно! В то время как Джек-фактор зафиксирован, костюм-фактор - нет. Костюм, который вы выберете в качестве козыря, зависит от количества козырей и стоимости ваших не козырных карт в вашей руке. Было бы слишком сложно объяснить, как выглядит хорошая рука, поэтому вы будете использовать следующий алгоритм:
Алгоритм Который-Трамп-до-Я-Пика
Вам не нужно участвовать в торгах. Если вы решите, что ваша рука слишком плоха, чтобы играть в одиночку, вы можете просто пройти. Ваша рука должна соответствовать следующим критериям для игры:
Имейте не менее 6 козырей (карты козырной масти, которые вы выбираете + количество валетов). Если это возможно для более чем одной масти, выберите ту, которая даст больше козырей. Если еще есть галстук, выберите костюм с наивысшим рейтингом, указанным выше.
Из не козырных карт есть как минимум 1 туз.
Если ваша рука не соответствует обоим этим критериям, вы пройдете. Если это произойдет, вы выведете рассчитанное игровое значение и выбранную козырную масть.
Краткое примечание: Конечно, это очень упрощенный алгоритм. Существует слишком много стратегии и опыта, чтобы судить руку, которую мы когда-либо могли бы покрыть в такой задаче.
вход
Каждая карточка имеет уникальный идентификатор. Первая часть - это костюм ( C lubs, S pades, H earts, D iamonds), вторая часть - это значение, которое задается этим отображением:
Ace -> A
King -> K
Queen -> Q
Jack -> J
10 -> 0
9 -> 9
8 -> 8
7 -> 7
Обе части объединены в одну карту. Сначала приходит ценность, затем идет костюм. Вы можете взять карты в любом формате, как вы хотите.
Выход
Если на руке можно играть, выведите значение игры и выбранный козырь (порядок не имеет значения). Если это не так, выведите «pass».
правила
- Как уже упоминалось, вы можете принять вход в наиболее удобном для вас формате. Примеры см. Ниже в тестовых случаях.
- Входные данные могут быть предоставлены аргументами командной строки, пользовательским вводом или аргументами функции.
- Вывод может быть предоставлен как возвращаемое значение или может быть просто напечатан на экране.
- Карты на входе нельзя заказывать никаким образом. Ваша программа должна иметь возможность обрабатывать любой случайный заказ карты.
- Побеждает самый низкий счетчик байтов!
Testcases
Ввод в тестовых примерах будет список 2-символьных строк.
1. ["JC", "JS", "JD", "AC", "KC", "9C", "AS", "7H", "QD", "8D"] -> 36 Clubs
2. ["JD", "AS", "0S", "KS", "QS", "9S", "8S", "AD", "8C", "9C"] -> 44 Spades
3. ["JH", "JD", "0S", "KS", "9C", "8C", "QH", "KH", "AD", "9D"] -> pass
4. ["JD", "AS", "KS", "QS", "0S", "9S", "8D", "7D", "0C", "QH"] -> pass
Объяснение:
- Два валета подряд с клюшками в роли козыря. Таким образом, значение игры составляет 3 х 12 = 36
- Три валета подряд пропали с пиками в качестве козыря. Таким образом, значение игры составляет 4 х 11 = 44
- Только максимум 4 козыри возможно, так что вы пройдете.
- Шесть козырей с пиками, но без козырного туза, так что вы пройдете.
Если некоторые правила неясны, продолжайте и комментируйте. Я вырос с этой игрой, поэтому мне сложно судить, достаточно ли подробно я описал все.
А теперь ... Удачного кодирования!
редактировать: как указано мне в комментариях (спасибо isaacg), есть правило, которое подсчитывает следующие главные козыри после 4-х валетов в «фактор-джек», так что оно может доходить до 11. Чтобы сделать этот вызов простым и чтобы не запутывать людей, правила, которые я предложил изначально, останутся такими, какие они есть. Таким образом, максимальный коэффициент остается на уровне 5.
источник
Ответы:
Python 2, пример реализации
Поскольку пока нет ни одного представления, я записал пример реализации на Python. Формат ввода такой же, как в тестовых примерах в задании.
Может быть, это мотивирует вас, ребята, начать, это не так сложно :)
источник
Java, 256 байт
Принимает входные данные как массив символьных массивов в формате
A4
, где4
есть клубы ,3
является Пики ,2
это сердце и1
является Diamonds . Выход36 4
за ставку 36 с козырной мастью булавы ,p
для прохождения.Попробуйте это онлайн здесь .
Безголовая версия:
источник
C 235 байт
Порт моего Java ответа .
Попробуйте это онлайн здесь .
Принимает входные данные как массив символов в формате
A4
, где4
есть клубы ,3
является Пики ,2
это сердце и1
является Diamonds . Выход36 4
за ставку 36 с козырной мастью булавы ,p
для прохождения.Безголовая версия:
источник