from functools import cache, reduce
from math import gcd
from fractions import Fraction
lcm = lambda xs: reduce(lambda acc, x: acc * x // gcd(acc, x), xs)
@cache
def dp(tup):
m = len(tup)
idx = next((i for i in range(m) if tup[i] == 0), None)
if idx is not None:
return [1 if i == idx else 0 for i in range(m)]
ans = [0 for _ in range(m)]
for i in range(m):
lst = list(tup)
s = sum(tup)
q = lst[i]
if lst[i] > 0:
lst[i] -= 1
t = tuple(lst)
for j, d in enumerate(dp(t)):
ans[j] += Fraction(q, s) * d
return ans
def divide_pot(wins):
fracs = dp(tuple(wins))
print("fracs :", fracs)
den = lcm([x.denominator for x in fracs])
return [x.numerator * (den // x.denominator) for x in fracs]
r = divide_pot([5,3,2])
print(r)
To embed this program on your website, copy the following code and paste it into your website's HTML: