from itertools import *
# probabilities of various events when drawing balls at random without
# replacement from a shuffled urn with r red and b blue balls
def red_blue(red, blue, k):
total = 0
no_red = 0
at_least_one_red = 0
one_of_each = 0
same_number = 0
for arrangement in combinations(range(red + blue), red):
total = total + 1
# count the number of red balls among the first k
red_count = count_reds(arrangement, k)
# update the counters depending on the value
if red_count == 0:
no_red = no_red + 1
else:
at_least_one_red = at_least_one_red + 1
if red_count < k:
one_of_each = one_of_each + 1
if 2 * red_count == k:
same_number = same_number + 1
return (no_red * 1.0 / total, at_least_one_red * 1.0 / total, one_of_each * 1.0 / total, same_number * 1.0 / total)
# determine the number of red balls among the first k in an arrangement
def count_reds(arrangement, k):
red_count = 0
for pos in arrangement:
if pos < k:
red_count = red_count + 1
return red_count