| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- from __future__ import annotations
- import sys
- import typing
- import cache
- def main() -> None:
- mat = sys.argv[1]
- recipes: list[Recipe] = cache.get('https://api.prunplanner.org/data/recipes')
- companies: dict[str, dict[str, CompanyOutput]] = cache.get(
- 'https://pmmg-products.github.io/reports/data/company-data-oct25.json')['individual']
- print(mat, '→')
- wrought = (recipe for recipe in recipes if mat in (i['Ticker'] for i in recipe['Inputs']))
- output_mats = {}
- for recipe in wrought:
- if len(recipe['Outputs']) != 1:
- continue
- (output,) = recipe['Outputs']
- (input,) = (i for i in recipe['Inputs'] if i['Ticker'] == mat)
- ratio = input['Amount'] / output['Amount']
- output_mats[output['Ticker']] = ratio
- print(f'\t{output["Ticker"]}:', ratio)
- companies_produced = companies_consumed = companies_consumed_80 = 0
- into = dict.fromkeys(output_mats.keys(), 0)
- for company in companies.values():
- if (co_production := company.get(mat)) is None:
- continue
- companies_produced += 1
- consumed = 0
- for output_mat, per_run_consumption in output_mats.items():
- if co_consumption := company.get(output_mat):
- total_consumption = co_consumption['amount'] * per_run_consumption
- consumed += total_consumption
- into[output_mat] += total_consumption
- if consumed > 0:
- companies_consumed += 1
- if consumed > 0.8 * co_production['amount']:
- companies_consumed_80 += 1
- print(f'{companies_produced} companies producing')
- print(f'{companies_consumed} companies consuming their own production')
- print(f'{companies_consumed_80} companies consuming 80%+ of their own production')
- for output_mat, total in into.items():
- print(f'{output_mat}:', total)
- class CompanyOutput(typing.TypedDict):
- amount: int
- class Recipe(typing.TypedDict):
- RecipeName: str
- BuildingTicker: str
- Inputs: list[RecipeMat]
- Outputs: list[RecipeMat]
- TimeMs: int
- class RecipeMat(typing.TypedDict):
- Ticker: str
- Amount: int
- if __name__ == '__main__':
- main()
|