Étant donné deux listes de lancers de dés pour une bataille à risque, votre programme ou fonction doit générer le nombre de troupes perdues par chaque joueur.
Contexte
Vous n'êtes pas obligé de lire ceci, car ce n'est qu'un arrière-plan. Passez à la sous-rubrique "Tâche" pour continuer sans relâche.
Dans le jeu de Risque , un joueur peut attaquer un autre joueur (en fait, c'est nécessaire pour gagner). Le résultat d'une bataille est déterminé par le lancer de dés. Chaque bataille se déroule comme une succession de sous-batailles dans lesquelles chaque joueur peut perdre jusqu'à 2
ses pièces d'armée.
Dans une sous-bataille, le défenseur et l'attaquant lancent chacun plusieurs dés dont le nombre peut varier en fonction de circonstances non pertinentes pour ce défi. Le dé le plus précieux de l'attaquant est comparé au dé le plus précieux du défenseur. Si le dé de l'attaquant est supérieur au dé du défenseur, le défenseur perd une pièce. Sinon, l'attaquant perd une pièce.
Ensuite, si les deux joueurs ont au moins deux dés, les deuxièmes dés les plus élevés des deux joueurs sont comparés. Encore une fois, si le dé de l'attaquant est supérieur au dé du défenseur, le défenseur perd une pièce. Sinon, l'attaquant perd une pièce.
(Le défenseur gagne des égalités. Si le défenseur et l'attaquant réussissent tous les deux 4
, l'attaquant perd un morceau.)
Dans cette sous-bataille de l'article de Wikipédia, les dés de l'attaquant sont rouges et les dés du défenseur sont blancs. Le plus haut des dés de l'attaquant est 4
le plus élevé des dés du défenseur 3
. Comme l'attaquant était plus haut, le défenseur perd un morceau. Les deuxièmes plus élevés sont 3
pour l'attaquant et 2
pour le défenseur. Comme l'attaquant était à nouveau plus haut, le défenseur perd un autre morceau. Ainsi, dans cette sous-bataille, l'attaquant ne perd aucune pièce et le défenseur perd des 2
pièces.
Notez que les troisièmes pièces les plus élevées ne sont pas comparées. En effet, le défenseur n'a pas plus de deux dés sur une seule sous-bataille, il n'y a donc pas de troisième pièce la plus élevée à comparer.
Tâche
Compte tenu des lancers de dés non triés (nombres entiers compris entre 1 et 6 inclus) de l'attaquant et du défenseur d'une sous-bataille de Risk sous n'importe quelle forme pratique, affichez le nombre de pièces d'armée que chaque joueur perd. La sortie peut être sous n'importe quelle forme pratique, tant qu'elle a des sorties différentes pour indiquer les cinq possibilités. Vous devez indiquer quelles sont ces différentes sorties dans votre question.
La sortie est déterminée comme suit: Commencez par def=0
et atk=0
. Si la plus grande valeur de la liste des dés de l'attaquant est supérieure à la plus grande valeur de la liste des dés du défenseur, alors incrémentez def
. Sinon, incrémentez atk
.
Si les deux listes de lancers de dés ont au moins une longueur 2
, alors: si la deuxième plus grande valeur de la liste des lancers de dés de l'attaquant est supérieure à la deuxième plus grande valeur de la liste, alors incrémentez def
et augmentez autrement atk
.
Enfin, le programme ou la fonction doit sortir un identifiant unique pour chacune des 5 possibilités de sortie suivantes:
╔═══╦═══╗
║atk║def║
╠═══╬═══╣
║ 1 ║ 0 ║
║ 0 ║ 1 ║
║ 2 ║ 0 ║
║ 1 ║ 1 ║
║ 0 ║ 2 ║
╚═══╩═══╝
Exemple
Défenseur: [3, 2]
Attaquant: [2, 4, 1]
Max du défenseur est 3
et max de l'attaquant 4
. 4>3
, donc le def=1
deuxième du défenseur est 2
et le deuxième de l'attaquant 2
. Not(2>2)
, donc atk=1
. La sortie pourrait alors être [1,1]
.
Cas de test
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]
Exemple d'implémentation
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]
Caractéristiques
- L'entrée peut être prise sous n'importe quelle forme qui code clairement uniquement les rôles du défenseur et les rôles de l'attaquant.
- La sortie peut être sous n'importe quelle forme qui fournit une sortie unique pour chacune des cinq possibilités énumérées ci-dessus.
- Les jets du défenseur sont une liste
1
ou des2
entiers dans l'ensemble[1,2,3,4,5,6]
. Les rouleaux de l'attaquant sont une liste1
d'3
entiers dans l'ensemble[1,2,3,4,5,6]
. - Puisqu'il s'agit de code-golf , le code le plus court dans chaque langue gagne! Ne laissez pas les réponses dans les langues de golf vous décourager de publier des réponses dans d'autres langues.