Closed tbasegio closed 9 years ago
Eu calculei 36 de base2 também.
#!/usr/bin/env python
decomposable = {
'm1': {
'b1': 2,
'b2': 2,
't1': 1,
},
'm2': {
'b1': 10,
't3': 1,
},
'm3': {
'b2': 2,
'b3': 1,
'm1': 2,
't1': 1,
't3': 1,
},
'm4': {
'm1': 2,
'm2': 2,
'm3': 2,
'b2': 2,
'b3': 1,
't1': 1,
't3': 1,
},
}
def multiply(res, quantity):
res = dict(decomposable[res])
for k in res:
res[k] = res[k] * quantity
return res
def merge(dict1, dict2):
dict1 = dict(dict1)
dict2 = dict(dict2)
for m in dict1:
if m in dict2:
dict1[m] = dict1[m] + dict2[m]
for n in dict2:
if n not in dict1:
dict1[n] = dict2[n]
return dict1
def decompose(res, quantity=1):
res = multiply(res, quantity)
while set(res.keys()).intersection(set(decomposable.keys())): # Check if there is decomposable
for mat in res:
if mat in decomposable: # If resource is decomposable
decomposed = decompose(mat, res[mat]) # Decompose it
del res[mat] # Remove material, keep decomposition
res = merge(res, decomposed)
break # It changes res durint iteration, must stop it
return res
print decompose('m4', 2)
# {'t3': 10, 't1': 18, 'b1': 64, 'b2': 36, 'b3': 6}
Executei com um job solicitando: 2 unidades do material4. O material4 é composto por outros materiais, sendo um deles o material3 que é composto pelo material1 conforme arquivo anexo.
A quantidade de base2 comprada para o job parece não estar correta. Comprou: 64x base1 - ok 6x base3 - ok 36x base2 - parece estar errado.