カードゲームの戦争は、カードがプレイフィールドからピックアップされてデッキに移動される順序について特定のルールに従う限り、最終結果がデッキの初期配置によって完全に決定されるという点で興味深いです。この課題では、2人のプレイヤーのみが存在し、物事を大幅に簡素化します。
ゲーム
- 各プレイヤーには26枚のカードが配られます。
- 各プレイヤーはデッキの一番上にあるカードを表向きに置きます。上位のカード(
Ace > King > Queen > Jack > 10 > 9 > 8 > 7 > 6 > 5 > 4 > 3 > 2
)を持つプレイヤーがラウンドに勝ち、相手のカードの上にカードを置き、裏返して、デッキの一番下に追加します(勝ったカードはデッキの一番下になります) 、他のプレイヤーの負けているカードはそのすぐ上にあります)。これは、プレイヤーの一人がカードを使い果たすまで行われます。- カードのランクが等しい場合、各プレイヤーは自分のデッキの一番上から2枚のカードを前のカードの上に表向きに配置します(そのため、デッキの上にあったカードはスタックの2枚目のカードになり、上から2番目のカードが上にあります)。次に、(各スタックの一番上のカードの)ランクが再び比較され、勝者は敗者のスタック全体の上にスタック全体を置き、スタックを上下逆にして、デッキの一番下に置きます。別のタイがある場合、勝者が選択されるか、1人のプレイヤーがカードを使い果たすまで、同じ方法でより多くのカードがプレイされます。
いずれかのプレイヤーがデッキからカードを引く必要があるが、デッキが空の場合、すぐにゲームに負けます。
チャレンジ
プレイヤーのデッキにある2種類のカードのリストを便利な形式で指定すると、プレイヤー1が勝った場合は真実の値を、プレイヤー2が勝った場合は偽の値を出力します。
便宜上、10枚のカードはで表され、すべてのカードの長さが1文字に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
。スーツは重要ではないため、スーツの情報は提供されません。
- すべてのゲームはある時点で終了すると仮定することができ(非常に長い時間がかかる場合があります)、あるプレイヤーは常に他のプレイヤーより先にカードを使い果たします。
- 各プレイヤーは同時にカードを置き、一度に1枚のカードを置くので、どのプレイヤーが最初にカードを使い果たしたかについてあいまいさはありません。
テストケース
テストケース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
ますか?