Карткова гра Війна цікава тим, що кінцевий результат повністю визначається початковим розташуванням колоди, якщо дотримуються певних правил щодо порядку, в якому карти вибираються з ігрового поля та переміщуються до колод. У цьому виклику будуть лише 2 гравці, які значно спрощують справи.
Гра
- Кожному гравцеві роздають колоду з 26 карт.
- Кожен гравець розміщує верхню карту в колоді обличчям вгору. Гравець з картою вищого рангу (
Ace > King > Queen > Jack > 10 > 9 > 8 > 7 > 6 > 5 > 4 > 3 > 2
) виграє раунд і розміщує їхню карту поверх картки опонента, перевертає їх і додає їх у нижню частину колоди (тому карта їх виграшу знаходиться в нижній частині колоди , а картка програшу іншого гравця знаходиться трохи вище неї). Це робиться, поки у одного з гравців не закінчиться карт.- Якщо картки мають рівний ранг, то кожен гравець розміщує дві топ-карти своєї колоди обличчям вгору на попередній картці (так що карта, яка знаходилася на вершині колоди, є другою картою в стеку, а карта, яка була другою зверху, знаходиться зверху). Потім порівнюються ранги (верхньої картки кожної стеки), і переможець розміщує всю свою групу поверх усієї стеки програвача, перевертає стек догори дном і ставить її на нижню частину колоди. Якщо є ще одна нічия, більше карт буде грати так само, доки не буде обраний переможець або у одного гравця не закінчиться карт.
Якщо в будь-який момент одному з гравців потрібно витягнути карту зі своєї колоди, але їх колода порожня, він негайно програє гру.
Змагання
Враховуючи два списки карт у колодах гравців, у будь-якому зручному форматі виведіть триєдине значення, якщо програвач перемагає, та значення фальси, якщо переможе програвач 2.
Для зручності 10 картка буде представлена символом a T
, а лицькі картки будуть скорочені ( Ace -> A, King -> K, Queen -> Q, Jack -> J
), так що всі картки мають один символ. Альтернативно, ранги можуть бути представлені десятковими цілими числами 2-14 ( Jack -> 11, Queen -> 12, King -> 13, Ace -> 14
) або шістнадцятковими цифрами 2-E ( 10 -> A, Jack -> B, Queen -> C, King -> D, Ace -> E
). Оскільки костюми не мають значення, інформація про костюми не надається.
- Ви можете припустити, що всі ігри закінчаться в якийсь момент (хоча це може зайняти дуже багато часу), і один гравець завжди не вистачить карт перед іншим.
- Кожен гравець розміщує картки одночасно та по одній картці одночасно, тому ніколи не виникає двозначності щодо того, хто з гравців першим закінчив карти.
Випробування
Тестові випадки використовують 23456789ABCDE
для представлення рангів (у порядку зростання).
D58B35926B92C7C4C7E8D3DAA2, 8E47C38A2DEA43467EB9566B95 -> False
669D9D846D4B3BA52452C2EDEB, E747CA988CC76723935A3B8EA5 -> False
5744B95ECDC6D325B28A782A72, 68394D9DA96EBBA8533EE7C6C4 -> True
87DB6C7EBC6C8D722389923DC6, E28435DBEBEA543AA47956594A -> False
589EAB9DCD43E9EC264A5726A8, 48DC2577BD68AB9335263B7EC4 -> True
E3698D7C46A739AE5BE2C49286, BB54B7D78954ED526A83C3CDA2 -> True
32298B5E785DC394467D5C9CB2, 5ED6AAD93E873EA628B6A4BC47 -> True
B4AB985B34756C624C92DE5E97, 3EDD5BA2A68397C26CE837AD48 -> False
9A6D9A5457BB6ACBC5E8D7D4A9, 73E658CE2C3E289B837422D463 -> True
96E64D226BC8B7D6C5974BAE32, 58DC7A8C543E35978AEBA34D29 -> True
C2978A35E74D7652BA9762C458, 9A9BB332BE8C8DD44CE3DE66A5 -> False
BEDB44E947693CD284923CEA82, 8CC3B75756255A683A6AB9E7DD -> False
EEDDCCBBAA8877665544332299, EEDDCCBBAA9988776655443322 -> False
EEDDCCBBAA9988776655443322, DDCCBBAA9988776655443E3E22 -> True
Довідкова реалізація
Ця реалізація посилань написана в Python 3 і приймає вхід у тому ж форматі, що і тестові випадки (за винятком розділених новим рядком замість коми та пробілу).
#!/usr/bin/env python3
from collections import deque
p1, p2 = [deque(s) for s in (input(),input())]
print(''.join(p1))
print(''.join(p2))
try:
while p1 and p2:
p1s = [p1.popleft()]
p2s = [p2.popleft()]
while p1s[-1] == p2s[-1]:
p1s.append(p1.popleft())
p2s.append(p2.popleft())
p1s.append(p1.popleft())
p2s.append(p2.popleft())
if p1s[-1] > p2s[-1]:
p1.extend(p2s+p1s)
else:
p2.extend(p1s+p2s)
except IndexError:
pass
finally:
print(len(p1) > 0)
1, 2, 3
гра не має кінця, оскільки ви продовжуєте вигравати супротивника 1
. Це вигадка з непарною кількістю карт?
1
?