Вступ
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-й фактор визначається козирним костюмом, який сольний гравець вибирає, використовуючи наступне відображення:
Clubs -> 12
Spades -> 11
Hearts -> 10
Diamonds -> 9
Це було легко, чи не так?
Значення гри
Значення гри є добутком двох факторів. Дуже легко ви думаєте? Неправильно! Поки Джек-Фактор фіксований, коефіцієнт костюму - ні. Костюм, який ви в кінцевому підсумку вибираєте як козир, залежить від кількості козирів та вартості ваших нетрудових карт у вашій руці. Було б надто складно пояснити, як виглядає хороша рука, тому ви будете використовувати наступний алгоритм:
Алгоритм «Що-Трамп-робити-я-вибираю»
Не потрібно брати участь у торгах. Якщо ви вирішите, що ваша рука занадто погана, щоб грати в соло, ви можете просто пройти. Для відтворення ваша рука повинна відповідати наступним критеріям:
Майте щонайменше 6 козирів (картки козирного костюма, який ви вибираєте + кількість валетів). Якщо це можливо для більш ніж одного костюма, виберіть той, який спричинить за собою більше козирів. Якщо краватка все ж є, виберіть костюм з найвищою оцінкою, наведеною вище.
З не козирних карт майте принаймні 1 туз.
Якщо ваша рука не відповідає обом цим критеріям, ви пройдете. Якщо це так, ви виведете розраховане значення гри та обраний козир.
Коротка примітка: Звичайно, це дуже спрощений алгоритм. Існує набагато більше стратегії та досвіду в оцінці руки, ніж ми могли коли-небудь покрити у подібному виклику.
Вхідні дані
Кожна картка має унікальний ідентифікатор. Перша частина костюм ( C Lubs, S Падес, H earts, D iamonds), друга частина являє собою значення , яке визначається цим відображенням:
Ace -> A
King -> K
Queen -> Q
Jack -> J
10 -> 0
9 -> 9
8 -> 8
7 -> 7
Обидві частини в поєднанні утворюють одну карту. Спершу приходить цінність, потім приходить костюм. Ви можете брати картки в будь-якому форматі за вашим бажанням.
Вихід
Якщо рука відтворюється, виведіть ігрову вартість та підібраний козирний костюм (порядок не має значення). Якщо ні, виведіть "pass".
Правила
- Як вже було сказано, ви можете взяти дані у найбільш зручному для вас форматі. Приклади див. Нижче в тестових випадках.
- Введення даних може надаватися аргументами командного рядка, введеннями користувача або аргументами функції.
- Вихід може бути наданий як повернене значення або може бути просто надрукований на екрані.
- Картки на вводі не можуть бути замовлені жодним чином. Ваша програма повинна мати можливість вирішувати будь-які випадкові замовлення картки.
- Найнижчі виграші в байті!
Тестові шафи
Вхід у тестові приклади буде переліком 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 x 12 = 36
- Три джеки підряд відсутні з піками як козир. Значить, значення гри 4 x 11 = 44
- Можливі лише максимум 4 козирні карти, тож ви пройдете.
- Шість козирів з піками, але не без козирного туза, тому ви пройдете.
Якщо деякі правила незрозумілі, продовжуйте і коментуйте. Я виріс із цією грою, тому мені важко судити, чи описав я все досить докладно.
А тепер… Щасливе кодування!
редагувати: Як вказувалося мені в коментарях (завдяки isaacg), є правило, яке підраховує наступні головні козирі після 4-х гнізд у "Джек-фактор", щоб воно могло перейти до 11. Щоб зробити цю проблему простою і щоб не бентежити людей, правила, які я запропонував спочатку, залишатимуться такими, якими вони є. Отже максимальний коефіцієнт залишається на рівні 5.