Dadas duas listas de jogadas de dados para uma batalha em Risco, seu programa ou função deve gerar quantas tropas cada jogador perde.
fundo
Você não precisa ler isso, pois é apenas um pano de fundo. Vá para o subtítulo "Tarefa" para continuar inabalável.
No jogo de risco , um jogador pode atacar outro jogador (na verdade, isso é necessário para vencer). O resultado de uma batalha é determinado pelo lançamento de dados. Toda batalha ocorre como uma sucessão de sub-batalhas nas quais cada jogador pode perder até 2
suas peças do exército.
Em uma sub-batalha, o defensor e o atacante jogam vários dados cujo número pode variar de acordo com circunstâncias irrelevantes para esse desafio. O dado de maior valor do atacante é comparado ao dado de maior valor do defensor. Se o dado do atacante for maior que o dado do defensor, o defensor perde uma peça. Caso contrário, o atacante perde uma peça.
Então, se ambos os jogadores tiverem pelo menos dois dados, o segundo valor mais alto dos dois jogadores será comparado. Novamente, se o dado do atacante for maior que o dado do defensor, o defensor perde uma peça. Caso contrário, o atacante perde uma peça.
(O defensor vence o empate. Se o defensor e o atacante rolarem a 4
, o atacante perderá uma peça.)
Nesta sub-batalha do artigo da Wikipedia, os dados do atacante são vermelhos e os dados do defensor são brancos. O maior dos dados do atacante é 4
e o maior dos dados do defensor 3
. Como o atacante estava mais alto, o defensor perde uma peça. Os segundos mais altos são 3
para o atacante e 2
para o defensor. Como o atacante voltou a subir, o defensor perde outra peça. Assim, nesta sub-batalha, o atacante não perde peças e o defensor perde 2
peças.
Observe que as terceiras partes mais altas não são comparadas. Isso ocorre porque o defensor não tem mais do que dois dados em uma única sub-batalha, portanto, não há terceiros terceiros maiores para comparar.
Tarefa
Dadas as jogadas de dados não ordenadas (inteiros no intervalo de 1 a 6, inclusive), tanto do atacante quanto do defensor de uma sub-batalha de Risco, em qualquer forma conveniente, produza o número de peças do exército que cada jogador perde. A saída pode estar em qualquer forma conveniente, desde que tenha saídas diferentes para indicar as cinco possibilidades. Você deve indicar quais são essas diferentes saídas em sua pergunta.
A saída é determinada da seguinte forma: Comece com def=0
e atk=0
. Se o maior valor da lista de jogadas de dados do atacante for maior que o maior valor da lista de jogadas de dados do defensor, então aumente def
. Caso contrário, incremente atk
.
Se as duas listas de jogadas de dados tiverem pelo menos comprimento 2
, então: se o segundo maior valor da lista de jogadas de dados do atacante for maior que o segundo maior valor da lista, aumente def
e, de outra forma, aumente atk
.
Por fim, o programa ou função deve gerar um identificador exclusivo para cada uma das 5 possibilidades de saída a seguir:
╔═══╦═══╗
║atk║def║
╠═══╬═══╣
║ 1 ║ 0 ║
║ 0 ║ 1 ║
║ 2 ║ 0 ║
║ 1 ║ 1 ║
║ 0 ║ 2 ║
╚═══╩═══╝
Exemplo
Defensor: [3, 2]
Atacante: [2, 4, 1]
Máximo de defensor 3
e máximo de atacante 4
. 4>3
, então o def=1
segundo do defensor é 2
e o segundo do atacante é 2
. Not(2>2)
então atk=1
. A saída poderia ser então [1,1]
.
Casos de teste
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]
Implementação de amostra
Python 2 ou 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]
Especificações
- A entrada pode ser tomada como qualquer forma que codifique claramente apenas as jogadas do defensor e as jogadas do atacante.
- A saída pode estar em qualquer forma que forneça uma saída exclusiva para cada uma das cinco possibilidades listadas acima.
- Rolos do defensor são uma lista de
1
ou2
inteiros no conjunto[1,2,3,4,5,6]
. Rolos do atacante são uma lista de1
para3
inteiros no conjunto[1,2,3,4,5,6]
. - Como se trata de código-golfe , o código mais curto em cada idioma vence! Você não deixar respostas em línguas golfe desanimá-lo de respostas postar em outras línguas.