5 votes

Fonction pour calculer les probabilités "Nd6 prendre les 2 plus élevés, trier en ordre décroissant" dans AnyDice

Je crée un blessure -table où le joueur doit lancer un d66 pour voir la gravité de la blessure subie par son personnage.

Les joueurs roulent jusqu'à 5d6 (ils lancent plus de dés si la blessure est plus grave), ils prennent les deux plus élevés, tandis que le plus élevé des deux est le chiffre des dizaines et l'autre le chiffre des unités. Par exemple, si je lance : 5, 3, 2, 6 je choisis les deux plus élevés, 5, 6 ; le plus élevé passe en premier, donc le résultat est 65 . Les valeurs possibles sont donc : 1, 2, 3, 4, 5, 6, 11, 21, 22, 31, 32, 33, 41, 42, 43, 44, 51, 52, 53, 54, 55, 61, 62, 63, 64, 65, 66

Dans le tableau, 66 est bien sûr pire pour le joueur qu'un 1 . J'ai cependant besoin de savoir quelle est la probabilité de rouler par exemple 1-21 ou 22-33 donc je peux attribuer la gravité des blessures à ces chiffres. Dans un premier temps, je suis d'accord avec une fonction qui considère seulement 2d6 .

7voto

Carcer Points 60981

Vous pouvez utiliser une fonction pour ce faire, comme ça :

function: injury ROLL:s {
  result: 1@ROLL * 10 + 2@ROLL
}

output [injury 5d6]

Vous fournissez à la fonction une réserve de dés (par exemple 5d6). La fonction convertit ce pool en une séquence ( :s ), ce qui signifie qu'il calcule le résultat pour chaque permutation possible de la réserve de dés. Lorsque des lots de dés sont transformés en séquences comme celle-ci, la séquence résultante est triée par défaut par ordre décroissant, de sorte que nous savons que le premier dé ( 1@ROLL ) sera le chiffre des dizaines et le 2ème dé ( 2@ROLL ) sera le chiffre des unités - nous multiplierons et ajouterons en conséquence pour obtenir votre résultat final.

La sortie pour 5d6, par exemple, ressemble à ça :

a table of results for the described function

5voto

trjh Points 11

Voilà :

function: highest DIGITS:n of ROLL:s in base BASE:n {
  SUM: 0
  loop I over {1..DIGITS} {
    SUM: BASE * SUM + I@ROLL
  }
  result: SUM
}

output [highest 2 of 5d6 in base 10]

Il s'agit d'une solution un peu plus générale qui vous permet d'extraire n'importe quel nombre de nombres roulés les plus élevés* en tant que chiffres dans n'importe quel fichier. base .

Comme Réponse de Carcer Cette solution fonctionne également en passant le jet de 5d6 à une fonction qui attend une séquence. Cela permet à AnyDice d'appeler la fonction pour chaque résultat possible (trié) du jet et de collecter les résultats dans un dé personnalisé.

La distribution qui en résulte semble intéressante :

Diagram

*) Vous pouvez aussi facilement généraliser le programme ci-dessus pour extraire toute sous-séquence (par exemple, la plus haute, la plus basse, la moyenne, la plus haute et la plus basse, etc.) du rouleau en remplaçant {1..DIGITS} dans la boucle avec une séquence passée en paramètre dans la fonction.

4voto

Someone_Evil Points 42173

C'est une distribution bizarre

Vous pouvez calculer la distribution en utilisant ce programme Anydice :

function: jroll R:s {
  result: 10*1@R + 2@R
}

output [jroll 5d6]

Anydice output

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