Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -23,17 +23,10 @@ Rk = np.indices((6,) * 6).reshape(6, -1).T
|
|
| 23 |
Rk = Rk[Rk.sum(axis=1) <= 5] # size 462
|
| 24 |
R5 = Rk[Rk.sum(axis=1) == 5] # size 252
|
| 25 |
|
| 26 |
-
#
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
# Calculate probabilities (P) of each R5 outcome from each Rk roll
|
| 32 |
-
P = np.zeros((len(Rk), len(R5)))
|
| 33 |
-
R5_indices = {tuple(r): i for i, r in enumerate(R5)}
|
| 34 |
-
for i, rk in enumerate(Rk):
|
| 35 |
-
for r in R[5 - rk.sum()]:
|
| 36 |
-
P[i, R5_indices[tuple(rk + r)]] += 1
|
| 37 |
P /= P.sum(axis=1, keepdims=True)
|
| 38 |
M = (P > 0).T # Mask for valid transitions
|
| 39 |
|
|
|
|
| 23 |
Rk = Rk[Rk.sum(axis=1) <= 5] # size 462
|
| 24 |
R5 = Rk[Rk.sum(axis=1) == 5] # size 252
|
| 25 |
|
| 26 |
+
# Calculate probabilities (P) of each R5 outcome from each Rk roll using multinomial weights
|
| 27 |
+
fact = np.array([1, 1, 2, 6, 24, 120])
|
| 28 |
+
Δ = R5[None, :] - Rk[:, None] # Δ[rk, r5, i]: number of die #i missing to go from Rk[rk] to R5[r5]
|
| 29 |
+
P = np.where((Δ >= 0).all(axis=2), fact[Δ.sum(axis=2)] // np.prod(fact[Δ.clip(min=0)], axis=2), 0)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
P /= P.sum(axis=1, keepdims=True)
|
| 31 |
M = (P > 0).T # Mask for valid transitions
|
| 32 |
|