私が個人的にオランダ語で「Oorlog」(「戦争」に翻訳されます)という名前で知っているカードゲームのある局面のシミュレーションを構築しましょう。
「Oorlog」はどのように機能しますか?
2組のカード(それぞれ2人のジョーカーを含む)は、プレイするプレイヤーの数に等しく分割されます。各プレイヤーは自分のストックをシャッフルし、自分の前に上下逆さまに置き、すべてのプレイヤーが同時にストックの最初のカードを開きます。
その「戦い」の勝者は、これらのルールに従うカードの価値によって決定されます。ジョーカー/エースがキングを破ります。キングはクイーンを破る。女王はジャックを破る。ジャックは10を破ります。10敗北9; ....さらに、2と3の両方がエース/ジョーカーを破ります。最後のルールは、2または3がエースまたはジョーカーを打ち、エースまたはジョーカーが他のカードを打ち、順番に2または3を打ち負かすサイクルにつながる可能性があります。この場合、2または3が勝ちます。
(このカードゲームではスーツは無関係です。)
2人以上のプレイヤーが同じ最高のカードを持っている場合、それらは「戦争」を持っています。これは、彼らが1枚のカードを上下逆さまに置き、それぞれがストックから新しいカードを開き、再び最高のカードを持っている人を探すことを意味します。これは、一人のプレイヤーが戦闘全体に勝つまで続きます。
(そのバトルのすべてのカードは、バトルに勝ったプレイヤーの捨て札パイルに行きます。その後、全員が新しいカードを開きます。プレイヤーの在庫がカードからなくなると、彼らは捨て札パイルをひっくり返し、この新しい在庫を続けます。これは、プレーヤーがすべてのカードを使い果たすまで続き、カードの量が最も多いプレーヤーが勝ちます。)
3人のプレイヤーとの「戦闘」の例:
- 4、8、ジャック:
ジャックが勝ちます。 - 7、エース、クイーン:
エースが勝ちます。 - 10、10、King:
キングが勝ちます。 - 3、ジョーカー、2:
3勝。 - エース、ジョーカー、2:
2勝。 - 3、クイーン、エース:
3勝。 - 女王、女王、9:
女王と女王は「戦争」をしているので、2枚の新しいカードが続きます:4、8;
8勝。 - 4、4、4:
すべてが「戦争」を抱えているため、3つの新しいカードが続きます。8、エース、2。
2勝。 - ジャック、5、ジャック:
ジャックとジャックは「戦争」をしているので、2枚の新しいカードが続きます。
5と5も等しいので、「戦争」は2つの新しいカードで再び続きます。
キングが勝ちます。 - ジョーカー、ジョーカー、エース:
すべてが「戦争」をしているので、3枚の新しいカードで続行します。9、7、9。
9と9も等しいので、「戦争」は2枚の新しいカードで続きます。ジャック、3。
ジャックが勝ちます。
だから、コードの挑戦に:
入力:
STDIN配列、または配列をシミュレートする文字列(呼び出し-言語が配列をサポートしている場合でも)。この配列には、時系列で戦闘のカードが含まれています(これについてのより明確な理解については、テストケースを参照してください)。
出力:
STDOUTバトルに勝ったプレイヤーのインデックス。
あなたはゼロインデックス(すなわちかどうかを選択することができ0
、1
または2
(IE)または1インデックス付きの出力を1
、2
、3
)。
チャレンジルール:
- 入力は、配列を表す単一の配列/文字列になります。したがって、単純化するために配列の配列を持つことはできません。また、戦争に参加していないカードの代理アイテムを持つことはできません。
- フェイスカードには、文字表記ではなく数字表記を使用します。だからエース/ジョーカー=
1
; ジャック=11
; クイーン=12
; とキング=13
。 - このチャレンジでは、常に3人のプレイヤーでプレイしていると想定できます。
- 最初の3つは「戦い」の始まりを示しています。2人以上のプレイヤーが「戦争」をしている場合、配列内の継続するカードは彼らの戦いを示します(これについてのより明確な理解については、テストケースを参照してください)。
一般的なルール:
- これにはcode-golfというタグが付いているため、バイト単位の最短回答が優先されます。
これは、非コードゴルフ言語が入るべきではないという意味ではありません。「あらゆる」プログラミング言語に対して、できるだけ短いコードとゴルフの答えを考えてみてください。 - 出力に使用したインデックス(ゼロまたは1インデックス)を記載してください。
テストケース:
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)