[RPG] How to use AnyDice to simulate rolling 6d6, and dropping the 2 lowest and 1 highest dice


I'm running a new D&D 5e campaign soon and I'd like to try rolling for stats with some guardrails. Doing some test throws at the table, I liked the look of rolling 6d6, then dropping the highest and two lowest rolls. It seems like this would generate a similar median to 4d6 (highest 3), but with a tighter distribution. However, I couldn't figure out how to model this in AnyDice.

This would be really easy to do with the "middle" function if you could just get it to round dice positions up instead of down, however I'm interested in any solution.

Best Answer


"... Teach a man to fish, ..."

In the documentation, section Introspection, the @ operator is described as the "access" operator:

you can retrieve individual numbers stored inside a value. You can either provide the position of a single value to retrieve, or a sequence of positions, in which case the retrieved values are summed.

6d6 is a "collection of dice", and in that subsection it says:

When accessing collection of dice, the dice will be order from highest value to lowest value. So 1@3d6 will select the highest rolled value, while 3@3d6 will select the lowest rolled value. {1,2}@3d6 will sum the highest two of the rolled values, discarding the lowest rolled value.

That means to achieve what you have described, you can write {2,3,4}@6d6, which means: "drop the highest result, sum the 2nd, 3rd and 4th highest values and discard the rest."


... doing this and comparing it with {1,2,3}@4d6 (4d6 drop lowest), you will find that the average result is a good bit lower, while being only marginally tighter:

enter image description here