Skip to content

Instantly share code, notes, and snippets.

@DrizztDoUrden
Last active October 7, 2023 20:35
Show Gist options
  • Save DrizztDoUrden/bbeb9a648a4da4e0bc18f809c5e94d62 to your computer and use it in GitHub Desktop.
Save DrizztDoUrden/bbeb9a648a4da4e0bc18f809c5e94d62 to your computer and use it in GitHub Desktop.
DnD5e excel module
JoinColumns=LAMBDA(left, right,
LET(
s, SEQUENCE(ROWS(left) + ROWS(right)),
IF(s > ROWS(left), INDEX(right, s - ROWS(left)), INDEX(left, s))
)
);
AverageRoll=LAMBDA(dieSides,
(1+dieSides)/2
);
AverageAdvantageRoll1=LAMBDA(dieSides,
AVERAGE(MAKEARRAY(
dieSides,
dieSides,
LAMBDA(r, c,
MAX(r, c)
)
))
);
AverageAdvantageRoll2=LAMBDA(dieSides,
AVERAGE(MAKEARRAY(
dieSides*dieSides,
dieSides*dieSides,
LAMBDA(r, c,
LET(
die0_0, r/dieSides,
die0_1, MOD(r,dieSides),
die1_0, c/dieSides,
die1_1, MOD(c,dieSides),
MAX(
die0_0 + die0_1,
die1_0 + die1_1
)
)
)
))
);
AverageAdvantageRoll=LAMBDA(dieSides, [diceNumber],
SWITCH(diceNumber,
0, AverageAdvantageRoll1(dieSides),
1, AverageAdvantageRoll1(dieSides),
2, AverageAdvantageRoll2(dieSides),
NA()
)
);
GWFResults=LAMBDA(dieSides,
JoinColumns(AverageRoll(dieSides), SEQUENCE(dieSides - 1, 1, 2, 1))
);
AverageGWFRoll=LAMBDA(dieSides,
AVERAGE(TRANSPOSE(GWFResults(dieSides)))
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment