class Process(object):
    def __init__(self,number,needed,entered=0):
        self._number=number
        self._need=needed
        self._left=needed
        self._started=entered

    def needsMore(self):
        if self._left>0:
            return True
        else:
            return False

    def canHave(self,amount):
        if self._left<amount:
            used=self._left
            self._left=0
            return used
        else:
            self._left -= amount
            return amount


    def getWaitingTime(self,endTime):
        elapsed=endTime-self._started
        print "Process %i finished in %i units"%(self._number,elapsed)
        return elapsed


from queues import *
def simulation(times,timeSlice):
    procNum=1
    q = ArrayQueue()
    for time in times:
        proc = Process(procNum,time)
        procNum +=1
        q.enqueue(proc)

    clock=0
    totalWaitTime=0

    while not q.isEmpty():
        proc=q.dequeue()
        used=proc.canHave(timeSlice)
        clock += used
        if proc.needsMore():
            q.enqueue(proc)
        else:
            totalWaitTime += proc.getWaitingTime(clock)

    print totalWaitTime/len(times)
