La fonction middle
fait déjà ce que vous voulez
En testant, il semble que les dés sont triés par ordre décroissant lors de la sélection du milieu. Cela signifie que [middle 3 of 6d6]
devrait être exactement ce que vous voulez : le 2ème, 3ème et 4ème dé après avoir trié les 6 dés du plus haut au plus bas, en laissant tomber le 1er dé (le plus haut) ainsi que les 5ème et 6ème dés (les deux plus bas).
Pour vous convaincre que la fonction middle
fonctionne ainsi, essayez [middle 1 of 2d6]
. Vous verrez que la distribution résultante est biaisée en faveur des valeurs plus grandes, ce qui signifie qu'elle sélectionne le plus grand des deux lancers.
Quoi qu'il en soit, au cas où vous voudriez un middle
alternatif qui arrondit les positions des dés vers le haut plutôt que vers le bas, nous pouvons facilement le faire en modifiant la fonction middle
standard, qui ressemble à cela :
function: middle NUMBER:n of DICE:d {
if NUMBER = #DICE { result: DICE }
if NUMBER = 1 { result: (1 + (#DICE - 1) / 2) @ DICE }
FROM: 1 + (#DICE - NUMBER) / 2
TO: FROM + NUMBER - 1
result: {FROM..TO}@DICE
}
Tout ce que nous avons à faire est d'ajouter un 1 supplémentaire à chaque endroit où un nombre est divisé par 2, pour changer l'arrondi vers le bas en arrondi vers le haut :
function: altmiddle NUMBER:n of DICE:d {
if NUMBER = #DICE { result: DICE }
if NUMBER = 1 { result: (1 + (#DICE) / 2) @ DICE }
FROM: 1 + (#DICE - NUMBER + 1) / 2
TO: FROM + NUMBER - 1
result: {FROM..TO}@DICE
}
Avec ces fonctions définies, nous pouvons exécuter ce qui suit :
output [middle 3 of 6d6] named "Milieu, positions arrondies vers le bas"
output [altmiddle 3 of 6d6] named "Milieu, positions arrondies vers le haut"
Vous remarquerez que celui qui utilise middle
a une moyenne plus élevée, ce qui signifie qu'il abandonne plus de dés bas que de dés hauts.