Risk에서 전투에 사용할 주사위 목록이 두 개라면, 프로그램이나 기능은 각 플레이어가 잃은 부대 수를 출력해야합니다.
배경
당신은 이것을 읽을 필요가 없습니다. 단지 배경 일뿐입니다. 줄이지 않고 계속 진행하려면 "작업"부제목으로 건너 뛰십시오.
Risk 게임에서는 한 플레이어가 다른 플레이어를 공격 할 수 있습니다 (사실,이기는 데 필요합니다). 전투 결과는 주사위 굴림에 의해 결정됩니다. 모든 전투는 각 플레이어 2
가 자신의 군대 를 잃을 수있는 하위 전투의 연속으로 발생합니다 .
서브 배틀에서 수비수와 공격자는 각각이 도전과 관련이없는 상황에 따라 숫자가 다를 수있는 여러 주사위를 굴립니다. 공격자의 최고 가치 주사위는 방어자의 최고 가치 주사위와 비교됩니다. 공격자의 주사위가 방어자의 주사위보다 높으면 방어자는 한 조각을 잃습니다. 그렇지 않으면 공격자가 한 조각을 잃습니다.
그런 다음 두 선수가 둘 이상의 주사위를 가지고 있다면 두 선수 중 두 번째로 높은 주사위를 비교합니다. 공격자의 주사위가 방어자의 주사위보다 높으면 방어자는 한 조각을 잃습니다. 그렇지 않으면 공격자가 한 조각을 잃습니다.
(수비수는 동점입니다. 수비수와 공격자가 모두를 굴리면 4
공격자는 조각을 잃습니다.)
Wikipedia 기사 의이 하위 전투에서 공격자의 주사위는 빨간색이고 방어자의 주사위는 흰색입니다. 공격자의 주사위 4
중 최고가이고 수 비자의 최고가입니다 3
. 공격자가 높을수록 수비수는 한 조각을 잃습니다. 두 번째로 높은 것은 3
공격자와 2
방어자를위한 것입니다. 공격자가 다시 높아졌기 때문에 방어자는 다른 조각을 잃습니다. 따라서이 하위 전에서 공격자는 조각을 잃지 않고 방어자는 2
조각을 잃는다 .
세 번째로 높은 조각은 비교되지 않습니다. 수비수가 하나의 서브 배틀에서 주사위를 2 개 이상 가지고 있지 않기 때문에 비교할 수있는 가장 높은 조각이 없습니다.
직무
공격자와 수비수의 하위 전투의 방어자 모두가 편리한 형태로 분류되지 않은 주사위 롤 (1 ~ 6 범위의 정수)을 고려할 때 각 플레이어가 잃은 군대 조각의 수를 출력하십시오. 출력은 5 가지 가능성을 나타내는 다른 출력을 갖는 한 편리한 형태 일 수있다. 질문에 다른 결과가 무엇인지 표시해야합니다.
출력은 다음과 같이 결정됩니다 . def=0
및로 시작하십시오 atk=0
. 공격자의 주사위 목록 목록의 최대 값이 방어자의 주사위 목록 목록의 최대 값보다 큰 경우 증가하십시오 def
. 그렇지 않으면을 증가시킵니다 atk
.
두 주사위 롤 목록의 길이가 적어도 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
. 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]
샘플 구현
파이썬 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 이므로 각 언어에서 가장 짧은 코드 가 승리합니다! 마십시오 하지 골프의 언어로 답변을 다른 언어로 게시 답변에서 당신을 낙담 할 수 있습니다.