satisfactory/plan.py

54 lines
1.4 KiB
Python
Raw Normal View History

2019-04-28 17:23:21 +10:00
#!/usr/bin/env python3
import satisfactory
import fractions
import collections
if __name__ == '__main__':
recipes = satisfactory.Cookbook('data/recipes')
required = collections.defaultdict(fractions.Fraction)
remain = []
target_name = 'supercomputer'
target = recipes[target_name]
target_recipe = target['recipes'][0]
remain.append({
target_name: fractions.Fraction(
target_recipe['output'][target_name],
target_recipe['crafting_time']
)
})
while remain:
for dst_name, dst_rate in remain.pop().items():
required[dst_name] += dst_rate
dst = recipes[dst_name]
if recipes.is_resource(dst_name):
continue
dst_recipe = recipes[dst_name]['recipes'][0]
src_recipe = recipes[dst_name]['recipes'][0]
normal_rate = fractions.Fraction(
dst_recipe['output'][dst_name],
dst_recipe['crafting_time']
)
scale = dst_rate / normal_rate
for src_name, src_count in src_recipe['input'].items():
src_rate = fractions.Fraction(
src_count,
dst_recipe['crafting_time']
) * scale
remain.append({src_name: src_rate})
print(required)
for name, rate in required.items():
machine = recipes[name]['machine']