Чит - карточная игра, в которой вы пытаетесь избавиться от своей руки. Ход выглядит примерно так:
- Определите, какое звание карты вы должны разыграть в этот ход. В большинстве вариантов это на один ранг выше, чем в предыдущем ходу.
- Сыграйте 1-4 карты, лицом вниз. Они не должны соответствовать действительному рангу. Если они этого не делают, это считается читом . В этот момент любой игрок может бросить вам вызов .
- Если никто не бросает вам вызов, игра продолжается до следующего игрока.
- Если кто-то бросает вам вызов, а вы не обманываете, ему нужно взять все сыгранные карты.
- Если кто-то бросает вам вызов и вы обманываете, вы должны взять все сыгранные карты.
Стратегия в основном представляет собой сочетание блефа и подсчета карт. Я плохо разбираюсь в математике, поэтому я собираюсь обмануть читов и взять с собой бота.
вход
Ввод будет в любом порядке или формате, который вы хотите:
- Рука игрока. Если я знаю, что у них должны быть карточки (например, я видел, как они их поднимали), они будут перечислены в порядке возрастания. Любые неизвестные будут перечислены позже
?. Например, если у них есть шесть карт, и я знаю, что две - это 1, а одна - 4, правильное представление руки - это114???. ? s всегда будут перечислены после известных карт.141???и11???4оба являются недействительными входными данными, и ваш код не должен обрабатывать их. - Карты, которые я точно знаю, не являются частью их руки (у меня они есть, я видел, как кто-то другой взял их и т. Д.). Список будет в порядке возрастания ранга. Список может быть пустым.
- Карты, на которые претендовал игрок. Если бы они утверждали, что играют в 3 7, возможный вклад здесь будет
777. Карты всегда будут одного ранга.
Количество сыгранных карт всегда будет 1-4, а ранги всегда будут 0-9. Ранг никогда не будет появляться более четырех раз в их руках + не в их руках.
Это пример правильного ввода:
33577??
01555688
55
Это пример неверного ввода:
35377?? # Out of order
7779 # Five 7's in total
23 # Two separate ranks played
Выход
Истинное значение, если мы должны определенно бросить вызов. Ложная ценность, если мы не хотим оспаривать.
Мы всегда бросаем вызов, если знаем, что они обманули. Мы знаем, что они обманули, если бы они играли в карты, которых у них не могло быть:
12
3 # They don't have any 3's or ?'s
-------------
12?
33 # Fewer ?'s than played cards
-------------
123?
333
33 # Since we have three 3's they can't have two
Другой раз, когда мы бросаем вызов, играют ли они свои последние карты. Даже если игра законна, игра закончится, и мы могли бы бросить ей вызов.
1
1 # They'd win, so challenge anyway
Больше тестов
Правда (должен оспаривать)
11445678?
22
-------------
????????
4
4444
-------------
12345678
9
Falsey (не должен оспаривать)
1?
222
2
-------------
12?
22
22
-------------
?????
1111
счет
Самый короткий код выигрывает.