如何使用python解决加油站的最大等待时间? - python

我遇到了一个已经解决了几天的问题。

在加气站(A []​​)上等待N辆汽车等待的汽油量的队列中,有3个加油机(X,Y,Z)的加油量受到限制。 1升油需要1秒。汽车瞬间移动。

假设汽车的燃料需求为D,则汽车应前往至少提供D升或等待的加油机。如果所有分配器都没有被占用,则汽车按字母顺序转到第一个。
当任何汽车将无法再加油时,返回-1。

例如X = 7,Y = 11,Z = 13和A = [2,8,4,3,2]

在时间0,car0驱动到X,car1驱动到Y
Z中没有足够的燃油供car2使用,因此它等待
在time2 car0完成加油,car 2开车到加油机X
在时间2,car3开车到点胶机Z
所有分配器都被占用,所以car4等待
当car2和car3离开时,X和Y中没有足够的汽油供car4使用,因此car4等到car1完成加油。
在时间8,汽车4行驶到分配器Y。

maxwait = 8

灵感:一直工作到time2,但我无法跟踪哪辆车正在哪个加油机加油。

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

参考方案

在“示例X = 7,Y = 11,Z = 13和A = [2,8,4,3,2]”中看起来13应该是3
下面的代码适用于该示例和某些其他情况,不确定是否可以涵盖所有需要的方案。

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))

任何评论/更正均受到高度赞赏。

在返回'Response'(Python)中传递多个参数 - python

我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…

Python exchangelib在子文件夹中读取邮件 - python

我想从Outlook邮箱的子文件夹中读取邮件。Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件我尝试了此页面folder部分中的内容,但无法正确完成https://pypi.python.org/pypi/exchangelib/ 参考方案 您需要首先掌握Folder的myfo…

R'relaimpo'软件包的Python端口 - python

我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。

Python ThreadPoolExecutor抑制异常 - python

from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED def div_zero(x): print('In div_zero') return x / 0 with ThreadPoolExecutor(max_workers=4) as execut…

如何用'-'解析字符串到节点js本地脚本? - python

我正在使用本地节点js脚本来处理字符串。我陷入了将'-'字符串解析为本地节点js脚本的问题。render.js:#! /usr/bin/env -S node -r esm let argv = require('yargs') .usage('$0 [string]') .argv; console.log(argv…