import random
 
A = [0,7,8,15,16,23,24,31]
B = [1,2,3,4,5,6,25,26,27,28,29,30,9,17,22]
C = [10,11,12,13,14,18,19,20,21]

if any(b in A for b in B) or any(c in A or c in B for c in C):
    raise RuntimeError('not valid input')
 
 
def sample_k(k):
    ret = []
    counter = 0
    for _ in range(k):
        # select a group
        v = random.random()
        if v < .5:
            g = A
        elif v < .95:
            g = B
        else:
            g = C

        while True:
            # select a num
            v = random.choice(g)
            counter += 1
            if v not in ret[-6:]:
                ret.append(v)
                break
    return ret, counter
 
 
seq, count = sample_k(100000)

print('accept rate:', float(len(seq)) / count)

sets = [set(A), set(B), set(C)]
group_count = [0] * 3

for v in seq:
    for i, s in enumerate(sets):
        if v in s:
            group_count[i] += 1
            break

group_prob = [float(p) / len(seq) for p in group_count]
print(group_prob)
