|
@@ -16,25 +16,28 @@ def main() -> None:
|
|
|
|
|
|
|
|
(expertise,) = frozenset(iter_expertise(ticker))
|
|
(expertise,) = frozenset(iter_expertise(ticker))
|
|
|
|
|
|
|
|
- with open('www/closest.json') as f:
|
|
|
|
|
- planet_ids = {planet_id for planet_id, closest_cx in json.load(f).items() if closest_cx == cx}
|
|
|
|
|
-
|
|
|
|
|
- planets = []
|
|
|
|
|
|
|
+ planets: dict[str, str] = {}
|
|
|
for planet, cogc in company.iter_planet_cogc():
|
|
for planet, cogc in company.iter_planet_cogc():
|
|
|
- if planet['PlanetId'] in planet_ids and cogc == expertise:
|
|
|
|
|
- planets.append(planet['PlanetName'])
|
|
|
|
|
- print(len(planets), expertise, 'planets near', cx)
|
|
|
|
|
|
|
+ if cogc == expertise:
|
|
|
|
|
+ planets[planet['PlanetId']] = planet['PlanetName']
|
|
|
|
|
+ print(len(planets), 'with', expertise, 'CoGC')
|
|
|
|
|
+
|
|
|
|
|
+ with open('www/closest.json') as f:
|
|
|
|
|
+ close_planet_ids = {planet_id for planet_id, closest_cx in json.load(f).items() if closest_cx == cx}
|
|
|
|
|
|
|
|
coid_code_name: dict[str, tuple[str, str]] = {}
|
|
coid_code_name: dict[str, tuple[str, str]] = {}
|
|
|
coid_bases = collections.defaultdict(list)
|
|
coid_bases = collections.defaultdict(list)
|
|
|
- for planet in planets:
|
|
|
|
|
- print('\t' + planet)
|
|
|
|
|
- bases = planet_bases.get_bases(planet)
|
|
|
|
|
|
|
+ for planet_id, planet_name in planets.items():
|
|
|
|
|
+ if planet_id in close_planet_ids:
|
|
|
|
|
+ print(f'\t\033[32m{planet_name}\033[0m')
|
|
|
|
|
+ else:
|
|
|
|
|
+ print(f'\t\033[31m{planet_name}\033[0m')
|
|
|
|
|
+ bases = planet_bases.get_bases(planet_name)
|
|
|
for base in bases:
|
|
for base in bases:
|
|
|
if (code := base['OwnerCode']) is None:
|
|
if (code := base['OwnerCode']) is None:
|
|
|
continue
|
|
continue
|
|
|
coid_code_name[base['OwnerId']] = code, base['OwnerName']
|
|
coid_code_name[base['OwnerId']] = code, base['OwnerName']
|
|
|
- coid_bases[base['OwnerId']].append(planet)
|
|
|
|
|
|
|
+ coid_bases[base['OwnerId']].append(planet_id)
|
|
|
|
|
|
|
|
coid_users: dict[str, str] = {company_id: d['Username']
|
|
coid_users: dict[str, str] = {company_id: d['Username']
|
|
|
for company_id, d in cache.get('https://pmmg-products.github.io/reports/data/knownCompanies.json', expiry=cache.ONE_DAY).items()}
|
|
for company_id, d in cache.get('https://pmmg-products.github.io/reports/data/knownCompanies.json', expiry=cache.ONE_DAY).items()}
|
|
@@ -43,16 +46,27 @@ def main() -> None:
|
|
|
for company_id, co_production in integration.pmmg_monthly_report().items():
|
|
for company_id, co_production in integration.pmmg_monthly_report().items():
|
|
|
if (mat_production := co_production.get(ticker)) is None:
|
|
if (mat_production := co_production.get(ticker)) is None:
|
|
|
continue
|
|
continue
|
|
|
- if bases := coid_bases.get(company_id):
|
|
|
|
|
|
|
+ if planet_ids := coid_bases.get(company_id):
|
|
|
code, co_name = coid_code_name[company_id]
|
|
code, co_name = coid_code_name[company_id]
|
|
|
username = coid_users[company_id]
|
|
username = coid_users[company_id]
|
|
|
- competitors.append(Competitor(code, co_name, username, mat_production['amount'], bases))
|
|
|
|
|
|
|
+ competitors.append(Competitor(code, co_name, username, mat_production['amount'], planet_ids))
|
|
|
competitors.sort(reverse=True)
|
|
competitors.sort(reverse=True)
|
|
|
|
|
|
|
|
total = 0.0
|
|
total = 0.0
|
|
|
for c in competitors:
|
|
for c in competitors:
|
|
|
- print(f'{c.code:4} {c.company_name:30} {c.username:20} {c.production:9,.1f}', ', '.join(c.bases))
|
|
|
|
|
- total += c.production
|
|
|
|
|
|
|
+ close_planet_num = 0
|
|
|
|
|
+ player_planets = []
|
|
|
|
|
+ for planet_id in c.planet_ids:
|
|
|
|
|
+ if planet_id in close_planet_ids:
|
|
|
|
|
+ player_planets.append(f'\033[32m{planets[planet_id]}\033[0m')
|
|
|
|
|
+ close_planet_num += 1
|
|
|
|
|
+ else:
|
|
|
|
|
+ player_planets.append(f'\033[31m{planets[planet_id]}\033[0m')
|
|
|
|
|
+
|
|
|
|
|
+ if close_planet_num > 0:
|
|
|
|
|
+ local_production = c.production * close_planet_num / len(c.planet_ids)
|
|
|
|
|
+ total += local_production
|
|
|
|
|
+ print(f'{c.code:4} {c.company_name:30} {c.username:20} {local_production:9,.1f} ', ' '.join(player_planets))
|
|
|
print(f'total: {total:,.1f}')
|
|
print(f'total: {total:,.1f}')
|
|
|
|
|
|
|
|
def iter_expertise(ticker: str) -> typing.Iterator[str]:
|
|
def iter_expertise(ticker: str) -> typing.Iterator[str]:
|
|
@@ -70,7 +84,7 @@ class Competitor:
|
|
|
company_name: str
|
|
company_name: str
|
|
|
username: str
|
|
username: str
|
|
|
production: float
|
|
production: float
|
|
|
- bases: typing.Sequence[str]
|
|
|
|
|
|
|
+ planet_ids: typing.Sequence[str]
|
|
|
|
|
|
|
|
def __lt__(self, other: Competitor) -> bool:
|
|
def __lt__(self, other: Competitor) -> bool:
|
|
|
return self.production < other.production
|
|
return self.production < other.production
|