8 votes

Comment puis-je obtenir "Nombre de dés dans le pool A supérieur au plus élevé du pool B" dans anydice ?

Ce que je cherche, c'est ceci : les piscines A et B lancent respectivement Xd6 et Yd6. Le résultat est déterminé comme suit :

  1. Le plus haut lancer parmi tous les dés est rh, et la piscine d'où il vient est Ph.

  2. L'autre piscine est Pt, et le plus haut lancer de cette piscine est rt.

  3. La magnitude du résultat, R, est égale au nombre de lancers dans Ph qui sont supérieurs à rt.

  4. Si Ph est A, le résultat est +R. Si Ph est B, le résultat est -R. (Si rh = rt, le résultat est une égalité.)

Exemple :

[6 6 5] vs [1 2] -> le gagnant est A, avec R = +3
[4 4 3] vs [6 6] -> le gagnant est B, avec R = -2
[4 4] vs [4 4 2] -> égalité, R = 0

10voto

nitsua60 Points 98443

Si je comprends bien votre question (ce qui n'est pas garanti : je l'ai lue plusieurs fois, et je ne suis toujours pas sûr à 100 % de l'avoir saisie, mais peut-être que c'est ce que font les siestes d'après-midi les jours de neige...), alors la fonction de solution est presque la même que la réponse d'Ilmari dans le post lié. La seule différence est ce qu'il faut faire en cas d'égalité. (Rien de spécial!)

function: A:s vs B:s {
  result: (A > 1@B) - (B > 1@A)
}

Rappelez-vous qu'un groupe de dés stocké sous forme de séquence (A:s) se trie automatiquement de haut en bas et les éléments sont accédés via @, donc 1@A renvoie le premier (c'est-à-dire le plus haut) lancer du groupe A. L'opérateur de comparaison agissant sur une séquence par rapport à un nombre générera un décompte de vérité en tant que résultat, donc A>1@B produit "le nombre de lancers dans A supérieurs au plus élevé de B". Et en cas d'égalité, nous savons (par construction) que A>1@B et B>1@A seront tous deux nuls, donc nous obtenons le résultat que vous souhaitez =)

Fonction définie, si vous voulez la voir en action, un simple appel comme

output [6d6 vs 4d6] named "6 vs 4"

ou

loop X over {3..6} {
  output [Xd6 vs 4d6] named "[X]d6 vs 4d6" 
}

fera l'affaire. C'est assez gourmand en temps, cependant, vous pourriez finir par exécuter de nombreux "combats" individuellement.


Je vais faire don de tout le rep de cette réponse à un post choisi par Ilmari ou, en l'absence d'un tel choix, à un post d'Ilmari que je choisis (via une prime). Parce que ce code est essentiellement le leur, avec une modification pour correspondre à votre condition d'égalité.

AlleGamers.com

AlleGamers est une communauté de gamers qui cherche à élargir la connaissance des jeux vidéo.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X