| Bytes | Lang | Time | Link |
|---|---|---|---|
| 307 | Python 3.8 prerelease | 250806T114951Z | ceilingc |
| 1091 | Python3 | 220331T155600Z | Ajax1234 |
Python 3.8 (pre-release), 345 333 323 313 307 bytes
def f(a,b,c,d):
k=A=0;W=[0]*len(b);Y=[0]*len(C:=[j for i,j in c for _ in range(i)]);S=[0]*len(d)
while a>0:
i=l=m=0;k+=1
for g,h in d:S[i]=z=-~S[i]%h;a-=(z<1)*g;i+=1
for j in C:
if-~Y[l]==j:Y[l]=0;a-=1
elif Y[l]+A:Y[l]+=1;A-=A>0
l+=1
for g,h in b:W[m]=z=-~W[m]%h;A+=(z<1)*g;m+=1
return k
Less golfed version
L=len
R=range
Z=lambda x:[i[1]for i in x for j in R(i[0])]
def f(a,b,c,d):
k=0 # current timestep
A=0 # number of clothes ready to dry
W=[0]*L(B:=Z(b)) # each machine has its own element in the array
Y=[0]*L(C:=Z(c))
S=[0]*L(D:=Z(d))
while a>0: # loop until all clothes washed
#print([W,A,Y,S,a])
for i in R(L(S)): # run dishwasher
a-=-~S[i]//D[i]
S[i]=-~S[i]%D[i]
for i in R(L(Y)): # run dryer
if-~Y[i]==C[i]:
Y[i]=0
a-=1
elif Y[i]+A:
Y[i]+=1
A-=A>0
for i in R(L(W)): # run washer
A+=-~W[i]//B[i]
W[i]=-~W[i]%B[i]
k+=1
return k
Python3, 1091 bytes:
import itertools as I
g=lambda x:[[a,[0,b]]for a,b in x]
E=enumerate
def p(m,o):
k=0
for i,a in E(m):
if a[1][1]==1:k+=a[1][0];m[i][1][1]=o[i][1];m[i][1][0]=0
elif a[1][0]:m[i][1][1]-=1
return k
C=lambda x:eval(str(x))
def P(d):
a,b=zip(*[(a[0],range(0,[0,a[0]][a[1][0]==0]+1))for i,a in E(d)])
return[[a,i]for i in I.product(*b)]
def U(b,d):
for x,y in P(d):
if(s:=sum(y))<=b:
D=C(d)
for i,(j,k)in E(zip(x,y)):D[i][1][0]+=k
yield b-s,D
def K(N,r,Q,s=[]):
if[]==Q:yield(N,r,s);return
if Q[0][1]:
if Q[0][0]in[0,2]:
for a,b in U([N,0,r][Q[0][0]],Q[0][1]):yield from K([a,0,N][Q[0][0]],[r,0,a][Q[0][0]],Q[1:],s+[b])
else:
for x in[{0:N,1:r},{1:r,0:N}]:
b=Q[0][1]
for i in[*x]:
for a,b in U(x[i],b):x[i]=a;yield from K(x[0],x[1],Q[1:],s+[b])
else:yield from K(N,r,Q[1:],s+[Q[0][1]])
def f(n,w,d,s):
q=[(n,*map(g,[w,d,s]),0,0,0)];O=[]
while q:
N,*U,r,c,t=q.pop(0)
W,D,S=map(C,U)
if c==n:return t-1
r+=p(W,w);c+=p(D,d)+p(S,s)
for _n,_r,[_w,_s,_d]in K(N,r,[(0,W),(1,S),(2,D)]):
if(M:=(_n,_w,_d,_s,_r,c,t+1)) not in O:
q+=[M];O+=[M]
Very brute force solution and as such, it times out on the larger test cases. I will come back to those later.