compute final bus compontents

This commit is contained in:
Michael Peters 2024-02-15 21:05:12 -08:00
parent 9004ded826
commit bde7682518

View File

@ -1,4 +1,19 @@
from pprint import pformat, pprint
from functools import lru_cache, partial
@lru_cache
def _dot_align(seq: tuple[float, ...]) -> dict[float, str]:
strs = [(f'{n:.9g}', n) for n in seq]
dots = [(s.find('.') if '.' in s else len(s), s, n) for s, n in strs]
md, _, _ = max(dots)
rv = {n: (' ' * (md - d) + s)[: md + 4] for d, s, n in dots}
assert not all(s.startswith(' ') for s in rv.values())
return rv
def dot_align(seq: tuple[float, ...], n) -> str:
return _dot_align(seq)[n]
recipies: dict[str, dict[str, float]] = {
# mining
@ -184,10 +199,12 @@ def compute_base_resource_flow(
SPM = 1
targets_groups: list[dict[str, float]] = [
{'science-red': 1},
{'science-green': 1},
{'science-gray': 2},
{'science-blue': 2},
{'science-red': SPM},
{'science-green': SPM},
{'science-gray': SPM},
{'science-blue': SPM},
{'science-purple': SPM},
{'science-yellow': SPM},
]
base_resources = {
'iron-plate',
@ -198,19 +215,31 @@ base_resources = {
'steel',
'sulfur',
'plastic',
'sulfuric-acid',
'lubricant',
}
# TODO: science-blue is wrong
print(f'{SPM=}')
print(f'{base_resources=}')
bus_inputs = {}
for targets in targets_groups:
results, intermediates = compute_base_resource_flow(targets, base_resources)
print()
print(f'{targets=}')
print('intermediates')
for resource, count in sorted(intermediates.items()):
print(f' {resource:25}: {count:.3g}')
print(f' {resource:35}: {dot_align(tuple(intermediates.values()), count)}')
print('results')
for resource, count in sorted(results.items()):
print(f' {resource:25}: {count:.3g}')
print(f' {resource:35}: {dot_align(tuple(results.values()), count)}')
bus_inputs = add_recipe(bus_inputs, results, -1)
print()
print('final bus inputs')
for resource, count in sorted(bus_inputs.items()):
if resource.startswith(('assembler', 'chemical-plant', 'oil-refinery')):
continue
print(f' {resource:35}: {dot_align(tuple(bus_inputs.values()), count)}')