使用的两种方法,明显看出用了类,逻辑简单了
''' 两个工序,,完成 3 个产品
A 上漆 10 花纹 15
B 上漆 16 花纹 8
C 上漆 13 花纹 12
'''
qi =[10,16,13]
hua =[15,8,12]
qi =[434,244,444]
hua =[37,37,37]
def ttime(aa,bb,cc):
"""
aa 代表 A 可以画花纹的时间点
bb 代表 B 可以画花纹的时间点
cc 代表 C 可以画花纹的时间点
"""
#花费的时间
t=0
#控制开关,0 一道工序也没有做,1代表第一道工序完成了,2代表第二道工序完成了
a=b=c=0
#第二道工序花费的时间
x,y,z=hua
#三个开关,避免a,b,c 状态 只被 触发一次
i=j=k=1
while a+b+c<6: #3个都画完毕,就退出
#时间滴答滴答
t+=1
if i and t>=aa: #第一件A 完成第一道工序了
a,i=1,0
#A 可以开始画花纹了
if j and t>=bb:
b,j=1,0
if k and t>=cc:
c,k=1,0
if a==1:
a=2
#这段时间都在画A
t+=x
if a+b+c<6:
t -=1
elif b==1:
b=2
t+=y
if a+b+c<6:
t -=1
elif c==1:
c=2
t+=z
if a+b+c<6:
t -=1
return t
ans=[]
paixu=[]
qiqi =[]
for i in range(3):
for j in range(3):
if i!=j:
k=3-i-j
#(0,1,2) (2,1,0)
now =(i,j,k)
#print(now)
paixu.append(now)
e=f=g =sum(qi)
if now[0]==0:
e=qi[0]
elif now[1]==0:
e=qi[now[0]] +qi[0]
if now[0]==1:
f=qi[1]
elif now[1]==1:
f=qi[now[0]] +qi[1]
if now[0]==2:
g=qi[2]
elif now[1]==2:
g=qi[now[0]] +qi[2]
tmp = ttime(e,f,g)
qiqi.append((e,f,g))
ans.append(tmp)
print(paixu)
print(ans,min(ans))
print('---------------------------')
class PPji:
def __init__(self,shijian) -> None:
self.ganwan=0
self.fei =shijian
def isbusy(self):
return self.fei!=0
def isnotbusy(self):
return self.fei==0
def dida(self):
if self.fei:
self.fei -=1
if self.fei==0:
self.ganwan+=1
ttt =sum(qi) +sum(hua)
from collections import deque
qq =deque()
def ganhuo(a,b,c):
gg=PPji(0)
for i in range(1,ttt+1):
if i ==a:
qq.append(hua[0])
if i==b:
qq.append(hua[1])
if i==c:
qq.append(hua[2])
if gg.isbusy():
gg.dida()
if qq and gg.isnotbusy():
gg.fei=qq.popleft()
if gg.ganwan==3:
return i
ans2 = ttt+1
for x,y,z in qiqi:
t=ganhuo(x,y,z)
ans2=min(ans2,t)
print(ans2)