Как решить АЗС максимальное время ожидания с питоном? - PullRequest
1 голос
/ 11 марта 2019

Я столкнулся с проблемой, над которой я работал несколько дней.

очередь из N автомобилей, ожидающих на заправочной станции (A []) с учетом необходимого количества газа, имеется 3 топливораздаточных колонки (X, Y, Z) с ограниченным количеством топлива. заполнение 1 л занимает 1 сек. Автомобили двигаются мгновенно.

предположим, что для автомобиля потребность в топливе составляет D, автомобиль должен отправиться в раздаточный автомат, который обеспечивает по крайней мере D литров или ждет. если все диспенсеры не заняты, машина идет по первому алфавиту. вернуть -1, когда ни одна машина не сможет заправиться.

например, X = 7, Y = 11, Z = 13 и A = [2,8,4,3,2]

в момент времени 0 автомобиль0 едет в X, а автомобиль 1 едет в Y не хватает топлива в Z для car2, поэтому он ждет в момент времени 2 автомобиль0 заканчивает дозаправку и автомобиль 2 едет к дозатору Х в time2 car3 едет к дозатору Z все диспенсеры заняты, так что car4 ждет для автомобилей car4 в X и Y будет недостаточно газа, когда автомобили car2 и car3 уйдут, поэтому автомобиль car4 ждет, пока автомобиль car1 закончит дозаправку. На время 8 машина 4 подъезжает к дозатору Y.

maxwait = 8

вдохновение: Работает до времени2, но я не могу отследить, какая машина заправляется и на какой дозатор.

def solution(A,X,Y,Z):

    station = {
    'X':True,
    'Y':True,
    'Z':True
     }


    t=0
    for y in range(100):
        t+=1


        for i in range(len(A)):


            if A[i]<=X and station['X']:
                A[i]-=1
                station['X']=False
                X-=1


            elif A[i]<=Y and station['Y']:
                A[i]-=1
                Y-=1
                station['Y']=False


            elif A[i]<=Z and station['Z']:
                A[i]-=1
                Z-=1
                station['Z']=False

            else:

                break

1 Ответ

0 голосов
/ 18 июля 2019

Похоже, 13 должно быть 3 в «примере X = 7, Y = 11, Z = 13 и A = [2,8,4,3,2]» приведенный ниже код может работать для примера и некоторых других случаев, но не уверен, что это может охватить все необходимые сценарии.

def calculateMaxTime(A,X,Y,Z):

    dispensers = [X, Y, Z]
    #occupied is each dispenser's serving time before car i
    occupied =[0,0,0]
    K=3

    for i in range(len(A)):
        startIndex = occupied.index(min(occupied))
        #print("startIndex: ",startIndex, " occupied: ", occupied)
        count = 0
        for j in range(K):
            idx = (startIndex+j)%K
            if(A[i] <= dispensers[idx]):
               if i == len(A)-1:
                   return occupied[idx];
               occupied[idx] += A[i]
               dispensers[idx] -= A[i]
               break
            else:
                count += 1
                if count == K:       
                    return -1

print("[2,8,4,3,2], 7, 11, 3, waiting time: ", calculateMaxTime([2,8,4,3,2], 7, 11, 3))
print("[2,8,3,3,2], 7, 11, 3, waiting time: ",calculateMaxTime([2,8,3,3,2], 7, 11, 3))
print("[2,8,4,3,2,1,2], 7, 11, 3, waiting time: ", calculateMaxTime([2,8,4,3,2,1,2], 7, 11, 3))
print("[8,2,4,3,2,1,1], 7, 11, 3, waiting time: ", calculateMaxTime([8,2,4,3,2,1,1], 7, 11, 3))

Любые комментарии / исправления приветствуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...