Riskでの戦闘のための2つのサイコロのリストを考えると、プログラムまたは機能は、各プレイヤーが失う軍隊の数を出力する必要があります。
バックグラウンド
あなたはこれを読む必要はありません。それは単なる背景です。「タスク」の小見出しにスキップして、衰えずに続行します。
リスクのゲームでは、1人のプレイヤーが別のプレイヤーを攻撃できます(実際、これは勝つために必要です)。戦闘の結果は、サイコロの出目によって決まります。すべてのバトルは、各プレイヤーが最大で負けるサブバトルの連続として発生します2
で軍隊のピースます。
サブバトルでは、ディフェンダーとアタッカーはそれぞれ、このチャレンジとは無関係の状況に基づいて数が異なる可能性のあるいくつかのサイコロを振ります。攻撃者の最も価値のあるダイスは、防御者の最も価値のあるダイスと比較されます。攻撃者のダイスが防御者のダイスよりも高い場合、防御者は1ピースを失います。それ以外の場合、攻撃者は1つのピースを失います。
次に、両方のプレイヤーが少なくとも2つのサイコロを持っている場合、2人のプレイヤーの2番目に高いサイコロが比較されます。繰り返しますが、攻撃者のダイスが防御者のダイスよりも高い場合、防御者は1ピースを失います。それ以外の場合、攻撃者は1つのピースを失います。
(防御側が同点を勝ち取ります。防御側と攻撃側の両方がをロールした4
場合、攻撃側は駒を失います。)
ウィキペディアの記事のこのサブバトルでは、攻撃者のサイコロは赤で、防御者のサイコロは白です。攻撃者のサイコロ4
の最高値はであり、防御者のサイコロの最高値は3
です。攻撃側の方が高かったため、防御側はピースを失います。二番目に高い3
、攻撃者と2
防御者です。攻撃者が再び高くなったため、防御者は別のピースを失います。したがって、このサブバトルでは、攻撃者はピースを失いませんし、防御者は2
ピースを失います。
3番目に高い部分は比較されないことに注意してください。これは、ディフェンダーが1つのサブバトルで2つ以下のサイコロを持っているため、これまでに比較する3番目に高いピースがないためです。
仕事
リスクのサブバトルの攻撃者と防御者の両方の任意の便利な形式の未分類のサイコロ(1〜6の範囲の整数)を考慮して、各プレイヤーが失う軍隊の数を出力します。5つの可能性を示すさまざまな出力がある限り、出力は任意の便利な形式にすることができます。質問には、これらの異なる出力が何であるかを示す必要があります。
出力は次のように決定されます。開始とdef=0
とatk=0
。攻撃者のさいころのリストの最大値が、防御者のさいころのリストの最大値よりも大きい場合、増分しますdef
。それ以外の場合、インクリメントしますatk
。
サイコロの両方のリストの長さが少なくとも2
である場合:攻撃者のサイコロのリストの2番目に大きい値がリストの2番目に大きい値よりも大きい場合、インクリメントしdef
、そうでなければインクリメントするatk
。
最後に、プログラムまたは関数は、次の5つの出力候補のそれぞれに対して一意の識別子を出力する必要があります。
╔═══╦═══╗
║atk║def║
╠═══╬═══╣
║ 1 ║ 0 ║
║ 0 ║ 1 ║
║ 2 ║ 0 ║
║ 1 ║ 1 ║
║ 0 ║ 2 ║
╚═══╩═══╝
例
防御者:[3, 2]
攻撃者:[2, 4, 1]
防御3
者の最大値と攻撃者の最大値はです4
。4>3
のでdef=1
、防御側の2
2番目は攻撃側の2番目です2
。Not(2>2)
、そうatk=1
。出力は次のようになります[1,1]
。
テストケース
Defender
Attacker
Output (as [def,atk])
-----
[1]
[1]
[0,1]
-----
[6,6]
[1,1,1]
[0,2]
-----
[1,2]
[5,2,3]
[2,0]
-----
[5]
[3,4]
[0,1]
-----
[4]
[4,5]
[1,0]
-----
[1,3]
[1,2,3]
[1,1]
-----
[4]
[4,5,6]
[1,0]
-----
[4,5]
[6,2]
[1,1]
-----
[5]
[6,1,3]
[1,0]
-----
[5,5]
[4,4,1]
[0,2]
-----
[2,5]
[2,2]
[0,2]
-----
[6,6]
[4,4,3]
[0,2]
-----
[2,1]
[4,3]
[2,0]
-----
[4]
[1,5]
[1,0]
-----
[1]
[5,2]
[1,0]
-----
[6,2]
[4]
[0,1]
-----
[4,2]
[2,5,5]
[2,0]
-----
[2]
[6,6,2]
[1,0]
-----
[6]
[2,6]
[0,1]
-----
[3,1]
[1]
[0,1]
-----
[6,2]
[3,5,2]
[1,1]
-----
[4,2]
[1,1]
[0,2]
-----
[4,3]
[5,4,1]
[2,0]
-----
[5,6]
[1,2]
[0,2]
-----
[3,2]
[4,4]
[2,0]
-----
[2]
[6,3,4]
[1,0]
-----
[1,4]
[6,2,4]
[2,0]
-----
[4,2]
[2,5,4]
[2,0]
-----
[5]
[6,2,1]
[1,0]
-----
[3]
[2,5,4]
[1,0]
-----
[5,4]
[2]
[0,1]
-----
[6,3]
[2,6,5]
[1,1]
-----
[3,1]
[4]
[1,0]
-----
[4]
[6,6,5]
[1,0]
-----
[6,3]
[4,2]
[0,2]
-----
[1,6]
[5,4]
[1,1]
-----
[3,6]
[4,4]
[1,1]
-----
[5,4]
[5,1,1]
[0,2]
-----
[6,3]
[5,4]
[1,1]
-----
[2,6]
[1,2]
[0,2]
-----
[4,2]
[3,5,5]
[2,0]
-----
[1]
[1,2,1]
[1,0]
-----
[4,5]
[1,6]
[1,1]
-----
[1]
[3,5,1]
[1,0]
-----
[6,2]
[6,2]
[0,2]
サンプル実装
Python 2または3
def risk(atk_rolls,def_rolls):
# set the rolls in descending order, e.g. [5,3,2]
atk_rolls = sorted(atk_rolls,reverse = True)
def_rolls = sorted(def_rolls,reverse = True)
# minimum length.
minlen = min(len(atk_rolls),len(def_rolls))
atk_lost = 0
def_lost = 0
# compare the highest-valued rolls
if atk_rolls[0]>def_rolls[0]:
def_lost += 1
else:
atk_lost += 1
if minlen == 2:
# compare the second-highest-valued rolls
if atk_rolls[1] > def_rolls[1]:
def_lost += 1
else:
atk_lost += 1
return [def_lost, atk_lost]
仕様書
- 入力は、のみを明確にエンコードする任意の形式として解釈できます、防御側のロールと攻撃側のロール。
- 出力は、上記の5つの可能性のそれぞれに対して一意の出力を提供する任意の形式にすることができます。
- ディフェンダーのロールは、セット内のリスト
1
または2
整数[1,2,3,4,5,6]
です。攻撃者のロールがリストされている1
と3
セットで整数[1,2,3,4,5,6]
。 - これはcode-golfなので、各言語で最短のコードが優先されます!ゴルフ言語での回答が他の言語での回答の投稿を妨げないようにしてください。