25 lines
577 B
Python
25 lines
577 B
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
from fractions import Fraction
|
||
|
|
||
|
def cut(state, i):
|
||
|
return state[:i] + (state[i]-1,) + \
|
||
|
tuple(n + 1 for n in state[i+1:])
|
||
|
|
||
|
def search(state=(1, 0, 0, 0, 0), cache={}):
|
||
|
if state in cache:
|
||
|
return cache[state]
|
||
|
if sum(state) == state[-1] == 1:
|
||
|
return 1
|
||
|
r = 0
|
||
|
for i, p in enumerate(state):
|
||
|
if not p:
|
||
|
continue
|
||
|
r += Fraction(p, sum(state)) * \
|
||
|
search(cut(state, i), cache)
|
||
|
r += (sum(state) == 1)
|
||
|
cache[state] = r
|
||
|
return r
|
||
|
|
||
|
print(float(round(search(), 6) - 2))
|