9 votes

Comment émuler la plus haute valeur d'une réserve de dés irrégulière dans AnyDice ?

En gros, j'essaie de faire quelque chose comme [le plus haut 1 de {un pool de Xd4, Yd6, Zd8, etc, tous ensemble}].

Par exemple : je lance 1d4, 1d6 et 1d8 ; leurs résultats sont, respectivement, 4(sur 4 maximum), 5(sur 6) et 2(sur 8). Mon résultat final est 5 ici.

Comment faire une telle chose dans la syntaxe AnyDice ?

0 votes

Pour "le plus haut de 3d4, 2d6 et 1d8", si vous lancez (4, 4, 4), (5, 5) et (7), voulez-vous un résultat de 7 (= le plus haut dé individuel) ou de 12 (= la plus haute somme de chaque type de dé) ? Ou, en d'autres termes, y a-t-il une différence entre "le plus élevé de 1d6, 2d6 et 3d6" et "le plus élevé de 6d6" ?

7voto

Bobson Points 3403

C'est faisable, mais vous devrez le décomposer en petits morceaux, ce qui rendra la syntaxe un peu ennuyeuse. Voici un exemple :

output [highest of [highest of 1@2d4 and 1@4d6] and [highest of 1@5d8 and 1@2d10]]

Maintenant pour décomposer cela : Le site highest of X and Y saisit la valeur la plus élevée des deux fournies. Le site 1@2d4 syntaxe saisit le dé le plus élevé obtenu dans le pool donné.

  • [highest of 1@2d4 and 1@4d6] - Le plus élevé du meilleur d4 et du meilleur d6
  • [highest of 1@5d8 and 1@2d10] - Le plus élevé du meilleur d8 et du meilleur d10
  • [highest of [highest of 1@2d4 and 1@4d6] and [highest of 1@5d8 and 1@2d10]] - Le plus élevé des résultats des deux précédents.

Vous pouvez également poursuivre l'imbrication higher of X and Y autant que nécessaire pour couvrir tous les pools de dés.

0 votes

C'est le plus adapté à ce que j'essaie de faire et le plus facile à comprendre, merci !

6voto

Masclins Points 3909

J'ai fait le código de manière à ce que vous n'ayez qu'à modifier X , Y y Z et ainsi vous avez la fonction le résultat le plus élevé de... afin que vous puissiez l'utiliser pour d'autres dés.

X:1
Y:1
Z:1

function: highest num of AA:n BB:n CC:n{
 if AA > BB {
  if AA > CC {result: AA}
  else {result: CC}
 }
 else {
  if BB > CC {result: BB}
  else {result: CC}
 }
}

function: highest result of A:s B:s C:s{
 result: [highest num of X@A Y@B Z@C]
}

output [highest result of Xd4 Yd6 Zd8]

0 votes

C'est une réponse plus souple que la mienne.

0 votes

Je pense que cette réponse a un bug ; pour obtenir des résultats corrects pour X,Y,Z > 1, la sortie de la deuxième fonction devrait être [highest num of 1@A 1@B 1@C] au lieu de [highest num of X@A Y@B Z@C] . (De plus, je pense évidemment que mon propre code est plus court et plus propre, mais je suis peut-être partial sur ce point).

0 votes

Je suis presque sûr qu'il y a un bug dans le premier bloc if. Vous dites que si AA > BB et AA > CC alors AA est le plus haut, sinon c'est CC. Mais AA > BB et BB > CC est toujours possible.

5voto

trjh Points 11

Supposons que vous vouliez calculer le résultat le plus élevé d'un seul dé dans le pool de dés mélangés, voici une solution simple :

function: max A:n B:n C:n {
    result: 1@[sort {A, B, C}]
}
output [max 1@3d4 1@2d6 1@1d8]

Ce code est également facilement extensible ; par exemple, Voici le même code avec quelques d12 et un d20. :

function: max A:n B:n C:n D:n E:n {
    result: 1@[sort {A, B, C, D, E}]
}
output [max 1@5d4 1@4d6 1@3d8 1@2d12 1@1d20]

(Notez comment les résultats 13-20 ont tous une probabilité de 1/20 = 5% dans cet exemple : chaque fois que vous obtenez un résultat supérieur à 12 sur le seul d20, ce sera le résultat le plus élevé, indépendamment de ce qui se passe avec les autres dés. Pour la même raison, la probabilité que le résultat le plus élevé soit 7 ou 8 est toujours 1/8 = 12,5 % dans le premier exemple).

La raison pour laquelle ce code fonctionne est la règle suivante : "Si un dé est fourni [à une fonction qui attend un nombre], alors la fonction sera invoquée pour tous les nombres sur le dé - ou les sommes d'une collection de dés - et le résultat sera un nouveau dé". La notation intégrée 1@DIE renvoie un dé (unique, biaisé) représentant la distribution du plus haut jet dans le dé original ; la méthode personnalisée [max NUMBER NUMBER NUMBER] qui se contente de calculer le maximum de trois nombres, est ensuite appelé pour chaque combinaison possible de rouleaux maximums, et les résultats sont pondérés par la probabilité des combinaisons. C'est une sorte de méthode de force brute, mais elle fonctionne.


Ps. Si vous écrivez [max 3d4 2d6 1d8] au lieu de [max 1@3d4 1@2d6 1@1d8] vous obtenez quelque chose de très différent - à savoir, le maximum somme de chaque type de dé. En gros, les 1@ fait en sorte que le maximum de chacun des trois rouleaux soit transmis à max alors qu'en l'omettant, c'est la somme de chaque jet qui est passée à la place. Bien sûr, si vous n'avez qu'un seul de chaque type de dé, cela ne fait aucune différence.

De plus, pour la même raison, la méthode décrite ci-dessus ne peut pas être facilement adaptée pour donner l'équation deuxième le plus grand nombre dans une réserve de dés irrégulière. Pour y parvenir, vous devrez plutôt transmettre chaque sous-pool à la fonction sous forme de séquence, comme décrit ici y aquí .

0 votes

Il s'agit clairement d'une approche plus élégante. J'ai essayé de faire quelque chose comme ce que vous avez fait, mais je n'ai pas réussi à le faire.

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