In [1]:
import itertools
import functools
from numpy.random import choice
from IPython.display import clear_output
In [2]:
HOME_WIN_PCT = .54
AT_LEAST_CONSEC_LOSSES = 5
TOTAL_GAMES = 7
HOME_LOSS = 1
HOME_WIN = 0
A_HOME = (0,1,5,6)
In [7]:
@functools.lru_cache(256)
def series_outcome(games):
a_wins = 0
b_wins = 0
series = []
for i, g in enumerate(games):
if i in A_HOME:
if g == HOME_WIN:
a_wins += 1
else:
b_wins += 1
else:
if g == HOME_WIN:
b_wins += 1
else:
a_wins += 1
series.append(g)
if a_wins == 4 or b_wins == 4:
break
return tuple(series)
In [4]:
NUM_TRIALS = 5000000
In [10]:
@functools.lru_cache(256)
def consec_losses(series):
groups = itertools.groupby(series)
try:
consec_losses = max([sum(group) for label, group in groups if label == HOME_LOSS])
except ValueError:
consec_losses = 0
return consec_losses
In [16]:
AT_LEAST_CONSEC_LOSSES = 6
In [17]:
at_least_loss_count = 0
for i,n in enumerate(range(NUM_TRIALS)):
games = series_outcome(tuple(choice((HOME_WIN, HOME_LOSS), 7, p=[HOME_WIN_PCT, 1-HOME_WIN_PCT])))
c_losses = consec_losses(games)
if c_losses >= AT_LEAST_CONSEC_LOSSES:
at_least_loss_count += 1
if (i % 1000)== 0 and i != 0:
clear_output()
print(i, at_least_loss_count / i)
In [18]:
AT_LEAST_CONSEC_LOSSES = 5
In [19]:
at_least_loss_count = 0
for i,n in enumerate(range(NUM_TRIALS)):
games = series_outcome(tuple(choice((HOME_WIN, HOME_LOSS), 7, p=[HOME_WIN_PCT, 1-HOME_WIN_PCT])))
c_losses = consec_losses(games)
if c_losses >= AT_LEAST_CONSEC_LOSSES:
at_least_loss_count += 1
if (i % 1000)== 0 and i != 0:
clear_output()
print(i, at_least_loss_count / i)
In [20]:
AT_LEAST_CONSEC_LOSSES = 4
In [21]:
at_least_loss_count = 0
for i,n in enumerate(range(NUM_TRIALS)):
games = series_outcome(tuple(choice((HOME_WIN, HOME_LOSS), 7, p=[HOME_WIN_PCT, 1-HOME_WIN_PCT])))
c_losses = consec_losses(games)
if c_losses >= AT_LEAST_CONSEC_LOSSES:
at_least_loss_count += 1
if (i % 1000)== 0 and i != 0:
clear_output()
print(i, at_least_loss_count / i)
In [22]:
AT_LEAST_CONSEC_LOSSES = 3
In [23]:
at_least_loss_count = 0
for i,n in enumerate(range(NUM_TRIALS)):
games = series_outcome(tuple(choice((HOME_WIN, HOME_LOSS), 7, p=[HOME_WIN_PCT, 1-HOME_WIN_PCT])))
c_losses = consec_losses(games)
if c_losses >= AT_LEAST_CONSEC_LOSSES:
at_least_loss_count += 1
if (i % 1000)== 0 and i != 0:
clear_output()
print(i, at_least_loss_count / i)
In [ ]: