เกมไพ่สงครามเป็นที่น่าสนใจว่าผลลัพธ์สุดท้ายจะถูกกำหนดโดยการเริ่มต้นของเด็คตราบใดที่กฎบางอย่างมีการปฏิบัติตามลำดับที่ไพ่ถูกหยิบขึ้นมาจากสนามเด็กเล่นและย้ายไปที่เด็ค ในความท้าทายนี้จะมีผู้เล่นเพียง 2 คนทำให้สิ่งต่าง ๆ ง่ายขึ้นอย่างมาก
เกม
- ผู้เล่นแต่ละคนจะได้รับไพ่ 26 ใบ
- ผู้เล่นแต่ละคนวางไพ่บนสุดในหน้าหงายหน้า ผู้เล่นที่มีไพ่อันดับสูงกว่า (
Ace > King > Queen > Jack > 10 > 9 > 8 > 7 > 6 > 5 > 4 > 3 > 2
) ชนะรอบและวางไพ่ไว้ที่ด้านบนของการ์ดของคู่ต่อสู้พลิกพวกเขาและเพิ่มพวกเขาที่ด้านล่างของสำรับ (ดังนั้นไพ่ที่ชนะจะอยู่ที่ด้านล่างของสำรับ และการ์ดที่แพ้ของผู้เล่นคนอื่นจะอยู่เหนือการ์ดนั้น) สิ่งนี้จะทำจนกว่าผู้เล่นคนหนึ่งจะหมดไพ่- หากไพ่อยู่ในอันดับที่เท่ากันผู้เล่นแต่ละคนจะวางไพ่ 2 ใบบนสุดของไพ่หงายหน้าขึ้นด้านบนของไพ่ใบที่แล้ว (เพื่อให้ไพ่ที่อยู่ด้านบนของสำรับเป็นไพ่ใบที่สองในกองซ้อนและ การ์ดที่ถูกรองจากด้านบนอยู่ด้านบน) จากนั้นอันดับ (ของการ์ดอันดับสูงสุดของแต่ละสแต็ค) จะถูกนำมาเปรียบเทียบอีกครั้งและผู้ชนะจะวางสแต็คทั้งหมดไว้ที่ด้านบนของสแต็กทั้งหมดของผู้แพ้เปลี่ยนสแต็กคว่ำลงและวางไว้ที่ด้านล่าง หากมีการเสมอกันจะมีการเล่นไพ่เพิ่มในลักษณะเดียวกันจนกว่าจะมีการเลือกผู้ชนะหรือผู้เล่นคนหนึ่งหมดไพ่
หาก ณ จุดใดจุดหนึ่งผู้เล่นจำเป็นต้องจั่วไพ่จากเด็คของตน แต่เด็คว่างเปล่าพวกเขาแพ้เกมทันที
ความท้าทาย
รับไพ่สองใบในเด็คของผู้เล่นในรูปแบบที่สะดวกใด ๆ เอาท์พุทค่าความจริงหากผู้เล่น 1 ชนะและมูลค่าที่ไม่ถูกต้องหากผู้เล่น 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
?