카드 게임 전쟁 은 흥미 진진한 결과가 경기장에서 카드를 수령하고 덱으로 이동하는 순서에 대한 특정 규칙을 따르는 한 덱의 초기 배열에 의해 결정된다는 점에서 흥미 롭습니다. 이 도전에서, 단지 2 명의 선수 만이있을 것이고, 일을 크게 단순화 할 것입니다.
게임
- 각 플레이어는 26 장의 카드로 구성됩니다.
- 각 플레이어는 맨 위 카드를 자신의 덱에 놓습니다. 순위가 높은 카드 (
Ace > King > Queen > Jack > 10 > 9 > 8 > 7 > 6 > 5 > 4 > 3 > 2
)를 가진 플레이어 는 라운드에서 이기고 카드를 상대방의 카드 위에 놓고 뒤집어서 덱 맨 아래에 추가합니다 (따라서 승리 카드는 덱 맨 아래에 있습니다) 다른 플레이어의 패배 카드는 바로 위에 있습니다). 이것은 플레이어 중 하나가 카드를 다 쓸 때까지 수행됩니다.- 카드의 순위가 같은 경우, 각 플레이어는 덱 맨 위의 카드 2 장을 앞면 카드 위에 놓습니다 (덱 맨 위에 있던 카드가 스택의 두 번째 카드가되도록합니다. 맨 위에서 두 번째 카드가 맨 위에옵니다). 그런 다음 (각 스택의 최상위 카드 순위)를 다시 비교하고 승자는 패자의 전체 스택 위에 전체 스택을 놓고 스택을 뒤집어 뒤집어 덱 맨 아래에 놓습니다. 다른 동점이있는 경우, 승자가 선택되거나 한 명의 플레이어가 카드를 소진 할 때까지 같은 방식으로 더 많은 카드가 사용됩니다.
어떤 시점에서 플레이어 중 한 명이 자신의 덱에서 카드를 뽑아야하지만 덱이 비어 있으면 즉시 게임에서 패배합니다.
도전
플레이어 덱에있는 두 가지 카드 목록이 편리한 형식으로 제공되면 플레이어 1이 이기면 참 값을, 플레이어 2가 이기면 거짓 값을 출력합니다.
편의상 10 장의 카드는로 표시되고 T
, 얼굴 카드는 ( Ace -> A, King -> K, Queen -> Q, Jack -> J
)로 표시되므로 모든 카드의 길이는 한 문자입니다. 또는 순위는 10 진수 2-14 ( Jack -> 11, Queen -> 12, King -> 13, Ace -> 14
) 또는 16 진수 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
?