リスクの戦いのために2つのサイコロのリストが与えられた場合、あなたのプログラムまたは機能は、各プレイヤーが何人の兵士を失ったかを出力しなければなりません。
バックグラウンド
You do not have to read this, for it is merely バックグラウンド.
Skip to “仕事” subheading to continue unabated.
危険の試合では、1人のプレイヤーが他のプレイヤーを攻撃することができます(実際は、これは勝つために必要)。戦闘の結果は、サイコロのロールによって決まります。すべての戦闘は、各プレイヤーが軍隊の
2
まで失うという、一連のサブ戦闘として発生します。
サブ戦闘では、防御側と攻撃側はそれぞれ、いくつかのサイコロを振りますが、その数はこのチャレンジに関係のない状況に基づいて変化する可能性があります。攻撃者の最高値のダイは、防御側の最高値のダイと比較されます。攻撃者のダイスがディフェンダーのダイスよりも高い場合、ディフェンダーは1つの物を失う。さもなければ、攻撃者は1ピースを失う。
次に、両方のプレイヤーが少なくとも2つのサイコロを持っている場合、2人のプレイヤーの2番目に高いサイコロが比較されます。また、攻撃者のダイスがディフェンダーのダイスよりも高い場合、ディフェンダーは1つの物を失う。さもなければ、攻撃者は1ピースを失う。
(ディフェンダーはネクタイを獲得します。ディフェンダーと攻撃者の両方が 4
をロールした場合、攻撃者はピースを失います)。
Wikipedia記事のこのサブ戦闘では、攻撃者のサイコロは赤で、防御側のサイコロは白です。攻撃者のダイスの最高は
4
で、防御側の最高は 3
です。攻撃者がより高いので、ディフェンダーは駒を失う。
2番目に高いのは、攻撃者の場合は 3
、守備者の場合は 2
です。攻撃者が再び高かったので、防御側は別の部分を失う。したがって、このサブ戦闘では、攻撃者は何も失わず、防御側は
2
個を失う。
3番目に高い部分は比較されないことに注意してください。これは、ディフェンダーが1つのサブ戦闘で2つ以上のサイコロを持っていないためです。
仕事
いずれかの都合のいい形でリスクのサブ戦闘の攻撃者と防御側の両方のソートされていないダイスロール(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 ║
╚═══╩═══╝
例
Defender: [3, 2]
Attacker: [2, 4, 1]
Max of defender is 3
and max of attacker is
4
. 4>3
, so def=1
Second
of defender is 2
and second of attacker is
2
. Not(2>2)
, so atk=1
.
The output could then be [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]
仕様
- The input may be taken as any form that clearly encodes
only the defender’s rolls and the attacker’s
rolls. - The output may be in any form that provides a unique output for
each of the five possibilities listed above. - The defender’s rolls are a list of
1
or
2
integers in the set[1,2,3,4,5,6]
. The
attacker’s rolls are a list of1
to3
integers in the set[1,2,3,4,5,6]
. - Since this is code-golf, shortest code in each
language wins! Do not let answers in
golfing languages discourage you from posting answers in other
languages.