Мне нравятся проблемы с карточными играми, поэтому я сделал это для итальянской карточной игры Scopa. Моя семья играет в эту игру с незапамятных времен. У него очень интересная система начисления очков, которая должна доставлять удовольствие игрой в гольф. Я отправлю ответ в R, чтобы начать веселье, которое, я уверен, люди улучшат.
Задача: выяснить количество очков, набранных в раунде Скопы, с учетом карт, которые игрок захватил во время раунда, в качестве входных данных.
В колоде Скопа 40 карт. Если вы используете международную колоду, вы удаляете 8, 9 и 10, оставляя A, 2,3,4,5,6,7, Q, J, K в каждой масти. 1 Есть два игрока или партнерства, и после каждого раунда все карты в конечном итоге захватываются одним или другим из двух игроков. Счет считается следующим (более подробная информация здесь ):
- Игрок с наибольшим количеством карт набирает 1 очко.
- Игрок с наибольшим количеством алмазов (или монет при использовании итальянской колоды) получает 1 очко.
- Игрок с 7 бриллиантами (или монетами), известной как сет-белло или красивая семерка, получает 1 очко.
- Игрок с самой высокой примирой набирает 1 очко. Первичная оценка игрока - это сумма очков карты наибольшего достоинства, которую игрок захватил в каждой масти (см. Таблицу ниже). Если у вас нет хотя бы одной карты в каждой масти, вы проиграете по умолчанию, даже если ваш счет превысит счет вашего оппонента. В чрезвычайно редком случае, когда ни один из игроков не имеет хотя бы одной карты в каждой масти, игрок с более высоким общим количеством очков получает очко. 2
Таблица начальных баллов
| Rank | Value |
| ----- | ----- |
| 7 | 21 |
| 6 | 18 |
| A | 16 |
| 5 | 15 |
| 4 | 14 |
| 3 | 13 |
| 2 | 12 |
| Q,J,K | 10 |
Таким образом, игрок может набрать максимум 4 очка за раунд. 3 Если есть галстук, который возможен для карт, алмазов или первобытных очков , никто не набирает очки.
Важно понимать, что, поскольку каждая карта должна быть захвачена одним из двух игроков, вы можете определить, какие карты должен был взять другой игрок, даже если вы знаете только, какие карты взял один игрок. Вам нужно будет сделать это, чтобы правильно забить примиру .
Правила вызова
вход
Ваш код должен принимать в качестве входных данных карты, захваченные одним игроком во время раунда Скопа.
Входные данные должны быть в строковом формате, в котором один символ представляет ранг каждой карты, а один символ - ее масть. Это устраняет потенциальную лазейку для прохождения начальных оценок непосредственно в качестве входных данных. Преобразование карточных рангов в начальные баллы должно быть выполнено в программе. Однако вы можете использовать одну строку, разделенную пробелами или запятыми, массивом строк или любым другим форматом. Например, если вы решите кодировать ранги как76A5432QJK
и подходит, какDCHS
вы могли бы использовать входные данные, такие как['7D', '6H', 'QD', 'JS']
или'7D,6H,QD,JS'
.
Выход
Целое число от 0 до 4, представляющее счет игрока.
выигрыш
Самый короткий ответ в байтах побеждает!
Контрольные примеры
["7D", "6D", "AD", "5D", "4D", "3D", "2D", "QD", "7C", "6C", "4C", "3C", "2C", "7H", "4H", "2H", "5S", "3S", "QS", "JS", "KS"]
4 : 1 балл за> 20 карт, 1 балл за> 5 бриллиантов, 1 балл за 7 бриллиантов и 1 балл за 78 очков в примире (7,7,7,5, когда у противника 7,6,5, К за 64)
["3D", "7C", "6C", "AC", "5C", "4C", "3C", "2C", "QC", "4H", "7S"]
Набирает 0 : <= 20 карт, <= 5 бриллиантов, нет 7 бриллиантов, и только 69 баллов в примире (7,7,4,3, где у оппонента 7,7,6, К на 70)
[7D", "6D", "AD", "5D", "4D", "3D", "2D", "7C", "6C", "AC", "5C", "4C", "3C", "2C", "7H", "6H", "AH", "5H", "4H", "3H", "2H"]
Результаты 3 : 1 балл за> 20 карт, 1 балл за> 5 бриллиантов, 1 балл за 7 бриллиантов. Primiera будет 63 (7,7,7) и противник может только набрать 51 (7, Q, Q, Q) , но так как эта рука не имеет лопат она теряет точку по умолчанию.
["7D", "6D", "AD", "5D", "4D", "3D", "2D", "QD", "JD", "KD", "QC", "QH", "QS"]
Результаты 3 : <= 20 карт, 1 очко за> 5 бриллиантов, 1 очко за 7 бриллиантов. Primiera только баллы 51 (7, Q, Q, Q) , и противник может набрать 63 (7,7,7) , но так как рука оппонента не имеет алмазов эта рука выигрывает primiera точку по умолчанию.
["7D", "6D", "AD", "5D", "4D", "3D", "2D", "QD", "JD", "KD", "7C", "7H"]
Результаты 3 : <= 20 карт, 1 очко за> 5 бриллиантов, 1 очко за 7 бриллиантов. Несмотря на то, что у этой руки нет пиков, она все равно выигрывает примиру со счетом от 63 до 57 (7,7,7 против 7,6,6), потому что рука противника не имеет бриллиантов.
["7D", "6D", "AD", "5D", "4D", "3D", "2D", "QD", "JD", "KD", "QC", "QH"]
Баллы 2 : <= 20 карт, 1 балл за> 5 бриллиантов, 1 балл за 7 бриллиантов. В этой руке нет пиков, а в руке противника нет бриллиантов. Соперник побеждает примиру со счетом от 63 до 41 (7,7,7 против 7, Q, Q).
[]
(пустой массив)
Результаты 0
1: По крайней мере, в нашей семье Джек превосходит «Куин» в Скопе, но это не имеет значения для целей подсчета очков.
2: я играю в эту игру с детства и никогда не видел, чтобы это случилось, но ваш код лучше справится с этим делом!
3: есть бонусные баллы за «зачистки», набранные во время раунда, которые я игнорирую для этой задачи.