Давайте создадим симулятор для аспекта в карточной игре, который я лично знаю под голландским названием «Oorlog» (переводится как «Война»).
Как работает «Орлог»?
Две колоды карт (каждая включает в себя два джокера) поровну поделены между количеством игроков. Каждый игрок перетасовывает свою собственную колоду, ставит ее вверх дном перед собой, и все игроки одновременно открывают первую карту колоды.
Победитель этой «битвы» определяется значениями карт, следующих следующим правилам: Джокер / Туз побеждает Короля; Король побеждает королеву; Королева побеждает Джека; Джек побеждает 10; 10 поражений 9; .... Кроме того, 2 и 3 побеждают туз / джокер. Последнее правило может привести к циклу, в котором 2 или 3 бьют Ace или Joker, Ace или Joker бьют какую-то другую карту, которая в свою очередь бьет 2 или 3. В этом случае 2 или 3 выигрывает битву.
(Костюм не имеет значения в этой карточной игре.)
Когда два или более игрока имеют равные старшие карты, у них появляется «война». Это означает, что они кладут одну карту вверх дном, а затем каждая открывает новую карту из своей колоды, снова смотря, у кого самая высокая карта. Это продолжается до тех пор, пока один игрок не выиграет весь бой.
(Все карты этого сражения попадают в колоду сброса игрока, который выиграл битву. Затем все открывают новую карту. Когда в колоде игрока нет карт, они переворачивают свою колоду сброса вверх ногами и продолжают эту новую колоду. Это продолжается до тех пор, пока игрок не выберет все свои карты, а затем выигрывает игрок с наибольшим количеством карт.)
Пример «битвы» с тремя игроками:
- 4, 8, Джек:
Джек выигрывает. - 7, Ace, Queen:
Ace выигрывает. - 10, 10, король:
король побеждает. - 3, Джокер, 2:
3 победы. - Туз, Джокер, 2:
2 победы. - 3, королева, туз:
3 победы. - Queen, Queen, 9:
Queen и Queen ведут «войну», поэтому она продолжается двумя новыми картами: 4, 8;
8 побед. - 4, 4, 4: у
всех идет «война», поэтому она продолжается тремя новыми картами: 8, туз, 2;
2 победы. - Джек, 5 лет, Джек:
Джек и Джек ведут «войну», поэтому продолжается две новые карты: 5, 5;
5 и 5 также равны, поэтому «война» снова продолжается с двумя новыми картами: 10, Король;
Король побеждает. - Джокер, Джокер, Туз: у
всех «война», поэтому она продолжается тремя новыми картами: 9, 7, 9;
9 и 9 также равны, поэтому «война» продолжается с двумя новыми картами: Джек, 3;
Джек побеждает.
Итак, на вызов кода:
Входные данные:
STDIN с массивом или строка, имитирующая массив (ваш вызов - даже если ваш язык поддерживает массивы). Этот массив содержит карты сражений в хронологическом порядке (см. Контрольные примеры для более ясного понимания этого).
Выход:
STDOUT индекс игрока, который выиграл битву.
Вы можете выбрать , хотите ли вы нулевой индексированный (то есть 0
, 1
или 2
) или одну индексированный выход (т.е. 1
, 2
, 3
).
Правила вызова:
- На входе будет один массив / строка, представляющая массив. Таким образом, вы не можете иметь массив массивов, чтобы упростить его. Вы также не можете иметь суррогатные предметы для карт, не участвующих в войне.
- Мы используем числовые обозначения для лицевых карт вместо буквенных обозначений. Так что Ace / Joker =
1
; Джек =11
; Королева =12
; и король =13
. - В этом соревновании мы можем предположить, что мы всегда играем с 3 игроками .
- Первые три указывают на начало «битвы». Когда у двух или более игроков есть «война», карты в массиве указывают на их битву (см. Контрольные примеры для более ясного понимания этого).
Основные правила:
- Это помечено code-golf , поэтому выигрывает самый короткий ответ в байтах.
Это не означает, что не должны входить языки без кода. Попытайтесь придумать как можно более короткий код-гольф для «каждого» языка программирования. - Пожалуйста, укажите, какой индекс (ноль или один индекс) вы использовали для вывода.
Тестовые случаи:
Test case 1: [4, 8, 11] -> 2 (or 3)
Test case 2: [7, 1, 12] -> 1 (or 2)
Test case 3: [10, 10, 13] -> 2 (or 3)
Test case 4: [3, 1, 2] -> 0 (or 1)
Test case 5: [1, 1, 2] -> 2 (or 3)
Test case 6: [3, 12, 1] -> 0 (or 1)
Test case 7: [12, 12, 9, 4, 8] -> 1 (or 2)
Test case 8: [4, 4, 4, 8, 1, 2] -> 2 (or 3)
Test case 9: [11, 5, 11, 5, 5, 10, 13] -> 2 (or 3)
Test case 10: [1, 1, 1, 9, 7, 9, 11, 3] -> 0 (or 1)
Test case 11: [13, 13, 4, 1, 3] -> 1 (or 2)
Test case 12: [13, 4, 13, 2, 3] -> 2 (or 3)