import random

HOW_MANY_FILES = 3000
HOW_MANY_DEVS = 5
HOW_LONG_BETWEEN_COMMITS = [1,5,10,15,20,25,30]


def checkout():
    idx = int(HOW_MANY_FILES*random.random())
    ver = files[idx]
    return idx,ver

def checkinMakesConflict(idx, ver):
    if files[idx]!=ver:
        files[idx]=files[idx]+1
        return True
    files[idx]=ver+1
    return False

sums={}

for i in range(0,1000):
    for time in HOW_LONG_BETWEEN_COMMITS:

        files = [0 for i in range(0,HOW_MANY_FILES)]

        conflicts = 0

        devCommits = {}

        for days in range(0,250):

            for dev in range(0,HOW_MANY_DEVS):
                idx_ver=checkout()
                devCommits[dev]=devCommits.get(dev,[])
                devCommits[dev].append(idx_ver)

            if days%time==0:
                for dev in range(0,HOW_MANY_DEVS):
                    l=devCommits[dev]
                    devCommits[dev]=[]
                    for fileIdx in range(0,len(l)):
                        if checkinMakesConflict(l[fileIdx][0],l[fileIdx][1]):
                            conflicts=conflicts+1

        sums[time]=sums.get(time,0)+conflicts

for key in sums:
    print key,sums[key]/1000
